Condividi tramite


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:

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:

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.

Informazioni sull'API MMDevice

Informazioni su WASAPI

Routing di flusso