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.
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 |