IAudioSessionNotification 接口 (audiopolicy.h)
IAudioSessionNotification 接口在创建音频会话时提供通知。
继承
IAudioSessionNotification 接口继承自 IUnknown 接口。 IAudioSessionNotification 也具有以下类型的成员:
方法
IAudioSessionNotification 接口具有以下方法。
IAudioSessionNotification::OnSessionCreated OnSessionCreated 方法通知已注册的进程已创建音频会话。 |
注解
与其他 WASAPI 接口(由 WASAPI 系统组件实现)不同, IAudioSessionNotification 接口由应用程序实现。 为了接收事件通知,应用程序向 IAudioSessionManager2::RegisterSessionNotification 方法传递指向其 IAudioSessionNotification 实现的指针。
注册其 IAudioSessionNotification 接口后,应用程序通过 接口中的方法以回调的形式接收事件通知。
当应用程序不再需要接收通知时,它会调用 IAudioSessionManager2::UnregisterSessionNotification 方法。 此方法删除应用程序以前注册的 IAudioSessionNotification 接口的注册。
应用程序不得在事件回调期间注册或取消注册通知回调。
会话枚举器可能不知道通过 IAudioSessionNotification 报告的新会话。 因此,如果应用程序完全依赖于会话枚举器来获取音频终结点的所有会话,则结果可能不准确。 若要解决此问题,应用程序应手动维护列表。 有关详细信息,请参阅 IAudioSessionEnumerator。
CoInitializeEx(NULL, COINIT_MULTITHREADED)
,确保应用程序使用多线程单元 (MTA) 模型初始化 COM。 如果未初始化 MTA,则应用程序不会从会话管理器接收会话通知。
运行应用程序用户界面的线程应初始化单元线程模型。
示例
下面的代码示例演示 IAudioSessionNotification 接口的示例实现。
class CSessionNotifications: public IAudioSessionNotification
{
private:
LONG m_cRefAll;
HWND m_hwndMain;
~CSessionManager(){};
public:
CSessionManager(HWND hWnd):
m_cRefAll(1),
m_hwndMain (hWnd)
{}
// IUnknown
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppv)
{
if (IID_IUnknown == riid)
{
AddRef();
*ppvInterface = (IUnknown*)this;
}
else if (__uuidof(IAudioSessionNotification) == riid)
{
AddRef();
*ppvInterface = (IAudioSessionNotification*)this;
}
else
{
*ppvInterface = NULL;
return E_NOINTERFACE;
}
return S_OK;
}
ULONG STDMETHODCALLTYPE AddRef()
{
return InterlockedIncrement(&m_cRefAll);
}
ULONG STDMETHODCALLTYPE Release)()
{
ULONG ulRef = InterlockedDecrement(&m_cRefAll);
if (0 == ulRef)
{
delete this;
}
return ulRef;
}
HRESULT OnSessionCreated(IAudioSessionControl *pNewSession)
{
if (pNewSession)
{
PostMessage(m_hwndMain, WM_SESSION_CREATED, 0, 0);
}
}
};
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 7 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 R2 [仅限桌面应用] |
目标平台 | Windows |
标头 | audiopolicy.h |