Notifiche pertinenti per il routing di flusso
In Windows 7, le API della piattaforma di alto livello che usano LE API audio principali, ad esempio Media Foundation, DirectSound e Wave, implementano la funzionalità di routing del flusso gestendo il passaggio di flusso da un dispositivo esistente a un nuovo endpoint audio predefinito. Le applicazioni multimediali che usano queste API usano il comportamento di routing del flusso senza alcuna modifica all'origine. I client WASAPI diretti possono usare le notifiche inviate dai componenti Audio core e implementare la funzionalità di routing del flusso.
Per implementare la funzionalità di routing del flusso, un client deve restare in ascolto di due tipi di eventi: notifiche di modifica del dispositivo e notifiche di disconnessione della sessione. Nell'implementazione fornita dalle API di alto livello, questi eventi vengono inviati per gli endpoint dispositivo predefiniti creati chiamando IMMDeviceEnumerator::GetDefaultAudioEndpoint. Per altre informazioni, vedere Recupero dell'endpoint del dispositivo per il routing di flusso.
Il componente Audio principale MMDeviceAPI fornisce callback di notifica quando i dispositivi audio vengono aggiunti, rimossi o modificati. Le modifiche di formato e sessione audio vengono segnalate come eventi tramite WASAPI.
Notifiche di modifica del dispositivo
MMDeviceAPI genera eventi quando i dispositivi audio vengono aggiunti, rimossi o modificati. Se il client deve fornire funzionalità di routing di flusso, deve implementare l'interfaccia IMMNotificationClient e registrarne l'implementazione con MMDeviceAPI.
Per ottenere le notifiche di modifica del dispositivo, il client deve eseguire le attività seguenti:
- Implementare l'interfaccia IMMNotificationClient per gestire le notifiche di modifica del dispositivo inviate da MMDeviceAPI.
- Registrare l'implementazione IMMNotificationClient con MMDeviceAPI chiamando il metodo IMMDeviceEnumerator::RegisterEndpointNotificationCallback.
Dopo la registrazione dell'implementazione del client di queste interfacce, il client riceve notifiche sotto forma di callback tramite i metodi di queste interfacce. I metodi IMMNotificationClient vengono chiamati da MMDeviceAPI quando genera eventi a livello di endpoint (modifiche dello stato dell'endpoint, arrivi di nuovi endpoint, eliminazioni di endpoint, modifiche predefinite dell'endpoint e modifiche alle proprietà dell'endpoint).
Se il client vuole fornire il routing di flusso per il dispositivo predefinito, il client deve implementare il comportamento di modifica del dispositivo quando riceve la notifica tramite il callback IMMNotificationClient::OnDefaultDeviceChanged.
Notifiche di modifica della sessione audio
Le modifiche alla sessione audio e le modifiche al formato vengono segnalate come eventi di sessione audio tramite WASAPI. Un client WASAPI implementa l'interfaccia IAudioSessionEvents e registra l'implementazione con WASAPI.
Per ricevere notifiche di modifica della sessione audio, il client deve eseguire le attività seguenti:
- Implementare l'interfaccia IAudioSessionEvents per gestire le notifiche di modifica del formato inviate da WASAPI.
- Registrare l'implementazione IAudioSessionEvents con WASAPI chiamando il metodo IAudioSessionControl::RegisterAudioSessionNotification.
I metodi IAudioSessionEvents vengono chiamati da WASAPI quando si verificano modifiche alla sessione audio. Questi eventi vengono generati quando cambia il nome visualizzato della sessione, il percorso icona, il volume, il parametro di raggruppamento o lo stato della sessione.
Per implementare la funzionalità di routing del flusso, il client deve attendere la notifica di disconnessione della sessione. Quando una sessione audio viene disconnessa o viene modificato il formato di un dispositivo, WASAPI invia le notifiche client sotto forma di callback tramite IAudioSessionEvents::OnSessionDisconnected. Con la notifica di disconnessione, WASAPI invia anche un valore che indica il motivo per cui la sessione è stata disconnessa. Ciò può verificarsi per diversi motivi, ad esempio il dispositivo è stato rimosso, il server è stato arrestato e così via. Per l'elenco completo dei motivi, vedi l'enumerazione AudioSessionDisconnectReason definita in AudioPolicy.h. Se il dispositivo predefinito cambia, il client deve attendere le notifiche (se non sono già state ricevute) accompagnate da un valore DisconnectReasonDeviceRemoval . In risposta a tali notifiche, il client potrebbe riaprire il flusso nel nuovo dispositivo predefinito.
Poiché tutte queste operazioni sono asincrone, l'ordine in cui l'applicazione riceve notifiche non può essere stimato. Tuttavia, in genere, l'applicazione riceve il valore AudioSessionDisconnect prima della notifica di modifica predefinita del dispositivo.
Formattare le notifiche di modifica
Le modifiche al formato audio si verificano quando cambia il formato del flusso. Ciò può verificarsi quando l'utente seleziona un nuovo formato nel pannello di controllo Audio o il nuovo dispositivo predefinito supporta un nuovo formato (ad esempio, HDMI o alcune interfacce audio professionali con una regolazione manuale della frequenza di campionamento). Per notificare al client questi tipi di modifiche al formato, WASAPI invia una notifica di sessione dall'implementazione registrata di IAudioSessionEvents::OnSessionDisconnected con un motivo di disconnessione di DisconnectReasonFormatChanged. Il client può gestire la notifica riaprendo il flusso nel nuovo formato.
Argomenti correlati