Udostępnij za pośrednictwem


Zarządzanie strumieniem

Po wyliczenie urządzeń punktu końcowego audio w systemie i zidentyfikowaniu odpowiedniego urządzenia renderowania lub przechwytywania, następnym zadaniem aplikacji klienckiej audio jest otwarcie połączenia z urządzeniem punktu końcowego i zarządzanie przepływem danych audio przez to połączenie. WASAPI umożliwia klientom tworzenie strumieni audio i zarządzanie nimi.

WASAPI implementuje kilka interfejsów w celu zapewnienia usług zarządzania strumieniami klientom audio. Podstawowy interfejs to IAudioClient. Klient uzyskuje interfejs IAudioClient dla urządzenia punktu końcowego audio przez wywołanie metody IMMDevice::Activate (z parametrem identyfikator em iid ustawionym na identyfikator REFIID IID_IAudioClient) w obiekcie punktu końcowego.

Klient wywołuje metody w interfejsie IAudioClient, aby wykonać następujące czynności:

  • Odkryj, które formaty audio obsługuje urządzenie punktu końcowego.
  • Pobierz rozmiar buforu punktu końcowego.
  • Pobierz format i opóźnienie strumienia.
  • Uruchamianie, zatrzymywanie i resetowanie strumienia, który przepływa przez urządzenie punktu końcowego.
  • Uzyskiwanie dostępu do dodatkowych usług audio.

Aby utworzyć strumień, klient wywołuje metodę IAudioClient::Initialize. Za pomocą tej metody klient określa format danych dla strumienia, rozmiar buforu punktu końcowego oraz to, czy strumień działa w trybie udostępnionym, czy wyłącznym.

Pozostałe metody w interfejsie IAudioClient należą do dwóch grup:

  • Metody, które mogą być wywoływane tylko po otwarciu strumienia przez IAudioClient::Initialize.
  • Metody, które mogą być wywoływane w dowolnym momencie przed lub po wywołaniu inicjowania.

Następujące metody można wywołać tylko po wywołaniu metody IAudioClient::Initialize:

Następujące metody można wywołać przed wywołaniem IAudioClient::Initialize:

Aby uzyskać dostęp do dodatkowych usług klienta audio, klient wywołuje metodę IAudioClient::GetService. Za pomocą tej metody klient może uzyskać odwołania do następujących interfejsów:

  • IAudioRenderClient

    Zapisuje dane renderowania w buforze punktu końcowego renderowania audio.

  • IAudioCaptureClient

    Odczytuje przechwycone dane z buforu punktu końcowego przechwytywania audio.

  • IAudioSessionControl

    Komunikuje się z menedżerem sesji audio w celu skonfigurowania sesji audio skojarzonej ze strumieniem i zarządzania nią.

  • ISimpleAudioVolume

    Określa poziom głośności sesji audio skojarzonej ze strumieniem.

  • IChannelAudioVolume

    Steruje poziomami głośności poszczególnych kanałów w sesji audio skojarzonej ze strumieniem.

  • IAudioClock

    Monitoruje szybkość danych strumienia i położenie strumienia.

Ponadto klienci WASAPI, którzy wymagają powiadomienia o zdarzeniach związanych z sesją, powinni zaimplementować następujący interfejs:

Na koniec klient może użyć interfejsu API wyższego poziomu do utworzenia strumienia audio, ale także wymagać dostępu do kontrolek sesji i kontrolek głośności dla sesji, która zawiera strumień. Interfejs API wyższego poziomu zwykle nie zapewnia tego dostępu. Klient może uzyskać kontrolki dla określonej sesji za pośrednictwem interfejsu IAudioSessionManager. Ten interfejs umożliwia klientowi uzyskanie interfejsów IAudioSessionControl i interfejsów ISimpleAudioVolume dla sesji bez konieczności używania interfejsu IAudioClient w celu utworzenia strumienia i przypisania strumienia do sesji. Klient uzyskuje interfejs IAudioSessionManager dla urządzenia punktu końcowego audio, wywołując metodę IMMDevice::Activate (z parametrem iid ustawioną na identyfikator REFIID IID_IAudioSessionManager) w obiekcie punktu końcowego.

Interfejsy IAudioSessionControl, IAudioSessionEventsi interfejsy IAudioSessionManager są definiowane w pliku nagłówkowym Audiopolicy.h. Wszystkie inne interfejsy WASAPI są zdefiniowane w pliku nagłówkowym Audioclient.h.

W poniższych sekcjach opisano sposób używania interfejsu WASAPI do zarządzania strumieniami audio:

Przewodnik programowania