Condividi tramite


Gestione dei flussi

Dopo aver enumerato i dispositivi endpoint audio nel sistema e identificando 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 tramite 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 primaria è 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) sull'oggetto endpoint.

Il client chiama i metodi nell'interfaccia di 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:

È 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:

  • IAudioRenderClient

    Scrive i dati di rendering in un buffer dell'endpoint di rendering audio.

  • IAudioCaptureClient

    Legge i dati acquisiti da un buffer di endpoint di acquisizione audio.

  • IAudioSessionControl

    Comunica con la gestione sessioni audio per configurare e gestire la sessione audio associata al flusso.

  • ISimpleAudioVolume

    Controlla il livello di volume della sessione audio associata al flusso.

  • IChannelAudioVolume

    Controlla i livelli di volume dei singoli canali nella sessione audio associata al flusso.

  • IAudioClock

    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:

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 sessione specifica tramite l'interfaccia IAudioSessionManager. Questa interfaccia consente al client di ottenere l'IAudioSessionControl e interfacce 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) sull'oggetto endpoint.

Le interfacce IAudioSessionControl, IAudioSessionEventse 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:

guida alla programmazione di