Condividi tramite


Interfaccia IAudioSessionNotification (audiopolicy.h)

L'interfaccia IAudioSessionNotification fornisce una notifica quando viene creata una sessione audio.

Ereditarietà

L'interfaccia IAudioSessionNotification eredita dall'interfaccia IUnknown . IAudioSessionNotification include anche questi tipi di membri:

Metodi

L'interfaccia IAudioSessionNotification include questi metodi.

 
IAudioSessionNotification::OnSessionCreated

Il metodo OnSessionCreated notifica ai processi registrati che la sessione audio è stata creata.

Commenti

A differenza delle altre interfacce WASAPI, implementate dal componente di sistema WASAPI, l'interfaccia IAudioSessionNotification viene implementata dall'applicazione. Per ricevere notifiche evento, l'applicazione passa al metodo IAudioSessionManager2::RegisterSessionNotification un puntatore all'implementazione IAudioSessionNotification .

Dopo aver registrato l'interfaccia IAudioSessionNotification , l'applicazione riceve le notifiche degli eventi sotto forma di callback tramite i metodi nell'interfaccia.

Quando l'applicazione non deve più ricevere notifiche, chiama il metodo IAudioSessionManager2::UnregisterSessionNotification . Questo metodo rimuove la registrazione di un'interfaccia IAudioSessionNotification registrata in precedenza dall'applicazione.

L'applicazione non deve registrare o annullare la registrazione dei callback di notifica durante un callback dell'evento.

L'enumeratore di sessione potrebbe non essere a conoscenza delle nuove sessioni segnalate tramite IAudioSessionNotification. Quindi, se un'applicazione si basa esclusivamente sull'enumeratore di sessione per ottenere tutte le sessioni per un endpoint audio, i risultati potrebbero non essere accurati. Per risolvere questo problema, l'applicazione deve mantenere manualmente un elenco. Per altre informazioni, vedere IAudioSessionEnumerator.

Nota Assicurarsi che l'applicazione inizializzi COM con il modello MTA (Multithreaded Apartment) chiamando CoInitializeEx(NULL, COINIT_MULTITHREADED) in un thread non interfaccia utente. Se MTA non viene inizializzato, l'applicazione non riceve notifiche di sessione dalla gestione sessione. I thread che eseguono l'interfaccia utente di un'applicazione devono essere inizializzati modello di threading di appartamento.
 

Esempio

Nell'esempio di codice seguente viene illustrata un'implementazione di esempio dell'interfaccia 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);
        }
    }
};

Requisiti

Requisito Valore
Client minimo supportato Windows 7 [solo app desktop]
Server minimo supportato Windows Server 2008 R2 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione audiopolicy.h

Vedi anche

Interfacce audio principali