Gestione dei flussi
Dopo aver enumerato i dispositivi endpoint audio nel sistema e aver identificato un dispositivo di rendering o acquisizione appropriato, l'attività successiva per un'applicazione client audio consiste nell'aprire una connessione con il dispositivo endpoint e gestire il flusso di dati audio su tale connessione. WASAPI consente ai client di creare e gestire flussi audio.
WASAPI implementa diverse interfacce per fornire servizi di gestione di flusso ai client audio. L'interfaccia principale è IAudioClient. Un client ottiene l'interfaccia IAudioClient per un dispositivo endpoint audio chiamando il metodo IMMDevice::Activate (con il parametro iid impostato su REFIID IID_IAudioClient) nell'oggetto endpoint.
Il client chiama i metodi nell'interfaccia IAudioClient per eseguire le operazioni seguenti:
- Individuare i formati audio supportati dal dispositivo endpoint.
- Ottenere le dimensioni del buffer dell'endpoint.
- Ottenere il formato e la latenza del flusso.
- Avviare, arrestare e reimpostare il flusso che scorre attraverso il dispositivo endpoint.
- Accedere a servizi audio aggiuntivi.
Per creare un flusso, un client chiama il metodo IAudioClient::Initialize. Tramite questo metodo, il client specifica il formato dei dati per il flusso, le dimensioni del buffer dell'endpoint e se il flusso opera in modalità condivisa o esclusiva.
I metodi rimanenti nell'interfaccia IAudioClient rientrano in due gruppi:
- Metodi che possono essere chiamati solo dopo l'apertura del flusso da IAudioClient::Initialize.
- Metodi che possono essere chiamati in qualsiasi momento prima o dopo la chiamata Initialize.
I metodi seguenti possono essere chiamati solo dopo la chiamata a IAudioClient::Initialize:
- IAudioClient::GetBufferSize
- IAudioClient::GetCurrentPadding
- IAudioClient::GetService
- IAudioClient::GetStreamLatency
- IAudioClient::Reset
- IAudioClient::Start
- IAudioClient::Stop
È possibile chiamare i metodi seguenti prima o dopo la chiamata IAudioClient::Initialize:
Per accedere ai servizi client audio aggiuntivi, il client chiama il metodo IAudioClient::GetService . Tramite questo metodo, il client può ottenere riferimenti alle interfacce seguenti:
-
Scrive i dati di rendering in un buffer dell'endpoint di rendering audio.
-
Legge i dati acquisiti da un buffer di endpoint di acquisizione audio.
-
Comunica con la gestione sessioni audio per configurare e gestire la sessione audio associata al flusso.
-
Controlla il livello di volume della sessione audio associata al flusso.
-
Controlla i livelli di volume dei singoli canali nella sessione audio associata al flusso.
-
Monitora la velocità dei dati del flusso e la posizione del flusso.
Inoltre, i client WASAPI che richiedono la notifica degli eventi correlati alla sessione devono implementare l'interfaccia seguente:
-
Per ricevere le notifiche degli eventi, il client passa un puntatore alla relativa interfaccia IAudioSessionEvents al metodo IAudioSessionControl::RegisterAudioSessionNotification come parametro di chiamata.
Infine, un client potrebbe usare un'API di livello superiore per creare un flusso audio, ma richiede anche l'accesso ai controlli sessione e ai controlli del volume per la sessione che contiene il flusso. Un'API di livello superiore in genere non fornisce questo accesso. Il client può ottenere i controlli per una determinata sessione tramite l'interfaccia IAudioSessionManager . Questa interfaccia consente al client di ottenere le interfacce IAudioSessionControl e ISimpleAudioVolume per una sessione senza richiedere al client di usare l'interfaccia IAudioClient per creare un flusso e per assegnare il flusso alla sessione. Un client ottiene l'interfaccia IAudioSessionManager per un dispositivo endpoint audio chiamando il metodo IMMDevice::Activate (con il parametro iid impostato su REFIID IID_IAudioSessionManager) nell'oggetto endpoint.
Le interfacce IAudioSessionControl, IAudioSessionEvents e IAudioSessionManager sono definite nel file di intestazione Audiopolicy.h. Tutte le altre interfacce WASAPI sono definite nel file di intestazione Audioclient.h.
Le sezioni seguenti descrivono come usare WASAPI per gestire i flussi audio:
- Informazioni su WASAPI
- Rendering di un flusso
- Acquisizione di un flusso
- Registrazione loopback
- Flussi in modalità esclusiva
- Ripristino da un errore di dispositivo non valido
- Uso di un dispositivo di comunicazione
- Routing di flusso
Argomenti correlati