Compartilhar via


Interface IAudioSessionNotification (audiopolicy.h)

A interface IAudioSessionNotification fornece notificação quando uma sessão de áudio é criada.

Herança

A interface IAudioSessionNotification herda da interface IUnknown . IAudioSessionNotification também tem esses tipos de membros:

Métodos

A interface IAudioSessionNotification tem esses métodos.

 
IAudioSessionNotification::OnSessionCreated

O método OnSessionCreated notifica os processos registrados que a sessão de áudio foi criada.

Comentários

Ao contrário das outras interfaces WASAPI, que são implementadas pelo componente do sistema WASAPI, a interface IAudioSessionNotification é implementada pelo aplicativo. Para receber notificações de evento, o aplicativo passa para o método IAudioSessionManager2::RegisterSessionNotification um ponteiro para sua implementação IAudioSessionNotification .

Depois de registrar sua interface IAudioSessionNotification , o aplicativo recebe notificações de evento na forma de retornos de chamada por meio dos métodos na interface.

Quando o aplicativo não precisa mais receber notificações, ele chama o método IAudioSessionManager2::UnregisterSessionNotification . Esse método remove o registro de uma interface IAudioSessionNotification que o aplicativo registrou anteriormente.

O aplicativo não deve registrar ou cancelar o registro de retornos de chamada de notificação durante um retorno de chamada de evento.

O enumerador de sessão pode não estar ciente das novas sessões que são relatadas por meio de IAudioSessionNotification. Portanto, se um aplicativo depende exclusivamente do enumerador de sessão para obter todas as sessões de um ponto de extremidade de áudio, os resultados podem não ser precisos. Para contornar isso, o aplicativo deve manter manualmente uma lista. Para obter mais informações, consulte IAudioSessionEnumerator.

Nota Certifique-se de que o aplicativo inicialize COM com o modelo MTA (Multithreaded Apartment) chamando CoInitializeEx(NULL, COINIT_MULTITHREADED) em um thread que não seja de interface do usuário. Se o MTA não for inicializado, o aplicativo não receberá notificações de sessão do gerenciador de sessão. Os threads que executam a interface do usuário de um aplicativo devem ser inicializados no modelo de threading apartment.
 

Exemplos

O exemplo de código a seguir mostra uma implementação de exemplo da interface 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 Valor
Cliente mínimo com suporte Windows 7 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 R2 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho audiopolicy.h

Confira também

Principais interfaces de áudio