Compartir a través de


Interfaz IAudioSessionNotification (audiopolicy.h)

La interfaz IAudioSessionNotification proporciona una notificación cuando se crea una sesión de audio.

Herencia

La interfaz IAudioSessionNotification hereda de la interfaz IUnknown . IAudioSessionNotification también tiene estos tipos de miembros:

Métodos

La interfaz IAudioSessionNotification tiene estos métodos.

 
IAudioSessionNotification::OnSessionCreated

El método OnSessionCreated notifica a los procesos registrados que se han creado la sesión de audio.

Comentarios

A diferencia de las otras interfaces WASAPI, que implementa el componente del sistema WASAPI, la interfaz IAudioSessionNotification se implementa mediante la aplicación. Para recibir notificaciones de eventos, la aplicación pasa al método IAudioSessionManager2::RegisterSessionNotification un puntero a su implementación de IAudioSessionNotification .

Después de registrar su interfaz IAudioSessionNotification , la aplicación recibe notificaciones de eventos en forma de devoluciones de llamada a través de los métodos de la interfaz .

Cuando la aplicación ya no necesita recibir notificaciones, llama al método IAudioSessionManager2::UnregisterSessionNotification . Este método quita el registro de una interfaz IAudioSessionNotification que la aplicación registró anteriormente.

La aplicación no debe registrar ni anular el registro de devoluciones de llamada de notificación durante una devolución de llamada de evento.

Es posible que el enumerador de sesión no tenga en cuenta las nuevas sesiones que se notifican a través de IAudioSessionNotification. Por lo tanto, si una aplicación se basa exclusivamente en el enumerador de sesión para obtener todas las sesiones de un punto de conexión de audio, es posible que los resultados no sean precisos. Para solucionarlo, la aplicación debe mantener manualmente una lista. Para obtener más información, vea IAudioSessionEnumerator.

Nota Asegúrese de que la aplicación inicializa COM con el modelo de apartamento multiproceso (MTA) llamando a CoInitializeEx(NULL, COINIT_MULTITHREADED) en un subproceso que no es de interfaz de usuario. Si MTA no se inicializa, la aplicación no recibe notificaciones de sesión del administrador de sesiones. Los subprocesos que ejecutan la interfaz de usuario de una aplicación deben inicializarse en el modelo de subprocesos de apartamento.
 

Ejemplos

En el ejemplo de código siguiente se muestra una implementación de ejemplo de la interfaz 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);
        }
    }
};

Requisitos

Requisito Value
Cliente mínimo compatible Windows 7 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 R2 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado audiopolicy.h

Consulte también

Interfaces de audio principales