IAudioSessionNotification 接口 (audiopolicy.h)

IAudioSessionNotification 接口在创建音频会话时提供通知。

继承

IAudioSessionNotification 接口继承自 IUnknown 接口。 IAudioSessionNotification 也具有以下类型的成员:

方法

IAudioSessionNotification 接口具有以下方法。

 
IAudioSessionNotification::OnSessionCreated

OnSessionCreated 方法通知已注册的进程已创建音频会话。

注解

与其他 WASAPI 接口(由 WASAPI 系统组件实现)不同, IAudioSessionNotification 接口由应用程序实现。 为了接收事件通知,应用程序向 IAudioSessionManager2::RegisterSessionNotification 方法传递指向其 IAudioSessionNotification 实现的指针。

注册其 IAudioSessionNotification 接口后,应用程序通过 接口中的方法以回调的形式接收事件通知。

当应用程序不再需要接收通知时,它会调用 IAudioSessionManager2::UnregisterSessionNotification 方法。 此方法删除应用程序以前注册的 IAudioSessionNotification 接口的注册。

应用程序不得在事件回调期间注册或取消注册通知回调。

会话枚举器可能不知道通过 IAudioSessionNotification 报告的新会话。 因此,如果应用程序完全依赖于会话枚举器来获取音频终结点的所有会话,则结果可能不准确。 若要解决此问题,应用程序应手动维护列表。 有关详细信息,请参阅 IAudioSessionEnumerator

注意 确保在非 UI 线程中调用 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

另请参阅

核心音频接口