Condividi tramite


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:

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

Guida per programmatori