Interfaccia IAudioSessionEnumerator (audiopolicy.h)
L'interfaccia IAudioSessionEnumerator enumera le sessioni audio in un dispositivo audio. Per ottenere un riferimento all'interfaccia IAudioSessionEnumerator dell'oggetto enumeratore di sessione, l'applicazione deve chiamare IAudioSessionManager2::GetSessionEnumerator.
Ereditarietà
L'interfaccia IAudioSessionEnumerator eredita dall'interfaccia IUnknown . IAudioSessionEnumerator include anche questi tipi di membri:
Metodi
L'interfaccia IAudioSessionEnumerator include questi metodi.
IAudioSessionEnumerator::GetCount Il metodo GetCount ottiene il numero totale di sessioni audio aperte nel dispositivo audio. |
IAudioSessionEnumerator::GetSession Il metodo GetSession ottiene la sessione audio specificata da un numero di sessione audio. |
Commenti
Se un'applicazione vuole ricevere una notifica quando vengono create nuove sessioni, deve registrare l'implementazione di IAudioSessionNotification con il gestore sessione. Al termine della registrazione, il gestore sessione invia notifiche create-session all'applicazione sotto forma di callback. Queste notifiche contengono un riferimento al puntatore IAudioSessionControl della sessione appena creata.
L'enumeratore di sessione mantiene un elenco delle sessioni correnti mantenendo riferimenti al puntatore IAudioSessionControl di ogni sessione. Tuttavia, l'enumeratore di sessione potrebbe non essere a conoscenza delle nuove sessioni segnalate tramite IAudioSessionNotification. In tal caso, l'applicazione avrà accesso solo a un elenco parziale di sessioni. Ciò può verificarsi se il puntatore IAudioSessionControl (nel callback) viene rilasciato prima dell'inizializzazione dell'enumeratore di sessione. Pertanto, se un'applicazione vuole un set completo di sessioni per l'endpoint audio, l'applicazione deve mantenere il proprio elenco.
L'applicazione deve eseguire i passaggi seguenti per ricevere le notifiche di sessione e gestire un elenco di sessioni correnti.
- Inizializzare COM con il modello Multithreaded Apartment (MTA) chiamando
CoInitializeEx(NULL, COINIT_MULTITHREADED)
in un thread non dell'interfaccia utente. Se L'autenticazione a più fattori non viene inizializzata, l'applicazione non riceve notifiche di sessione dal gestore sessione.Nota I thread che eseguono l'interfaccia utente di un'applicazione devono essere inizializzati con il modello di threading apartment. - Attivare un'interfaccia IAudioSessionManager2 dal dispositivo endpoint audio. Chiamare IMMDevice::Activate con il parametro iid impostato su IID_IAudioSessionManager2. Questa chiamata riceve un riferimento all'interfaccia IAudioSessionManager2 del gestore sessione nel parametro ppInterface .
- Implementare l'interfaccia IAudioSessionNotification per fornire il comportamento di callback.
- Chiama IAudioSessionManager2::RegisterSessionNotification per registrare l'implementazione dell'applicazione di IAudioSessionNotification.
- Creare e inizializzare l'oggetto enumeratore di sessione chiamando IAudioSessionManager2::GetSessionEnumerator. Questo metodo genera un elenco di sessioni correnti disponibili per l'endpoint e aggiunge i puntatori IAudioSessionControl per ogni sessione nell'elenco, se non sono già presenti.
- Usare l'interfaccia IAudioSessionEnumerator restituita nel passaggio precedente per recuperare ed enumerare l'elenco di sessioni. Il controllo sessione per ogni sessione può essere recuperato chiamando IAudioSessionEnumerator::GetSession. Assicurarsi di chiamare AddRef per ogni controllo sessione per mantenere il conteggio dei riferimenti.
- Quando l'applicazione riceve una notifica di creazione sessione, aggiungere il puntatore IAudioSessionControl della nuova sessione (ricevuta in IAudioSessionNotification::OnSessionCreated) all'elenco di sessioni esistenti.
Un controllo sessione è valido purché l'applicazione disponga di un riferimento al controllo sessione nell'elenco.
Esempio
Il codice di esempio seguente illustra come creare l'oggetto enumeratore di sessione e quindi enumerare le sessioni.
HRESULT EnumSessions(IAudioSessionManager2* pSessionManager)
{
if (!pSessionManager)
{
return E_INVALIDARG;
}
HRESULT hr = S_OK;
int cbSessionCount = 0;
LPWSTR pswSession = NULL;
IAudioSessionEnumerator* pSessionList = NULL;
IAudioSessionControl* pSessionControl = NULL;
// Get the current list of sessions.
CHECK_HR( hr = pSessionManager->GetSessionEnumerator(&pSessionList));
// Get the session count.
CHECK_HR( hr = pSessionList->GetCount(&cbSessionCount));
for (int index = 0 ; index < cbSessionCount ; index++)
{
CoTaskMemFree(pswSession);
SAFE_RELEASE(pSessionControl);
// Get the <n>th session.
CHECK_HR(hr = pSessionList->GetSession(index, &pSessionControl));
CHECK_HR(hr = pSessionControl->GetDisplayName(&pswSession));
wprintf_s(L"Session Name: %s\n", pswSession);
}
done:
CoTaskMemFree(pswSession);
SAFE_RELEASE(pSessionControl);
SAFE_RELEASE(pSessionList);
return hr;
}
Requisiti
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 |