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:
- IAudioClient::GetBufferSize
- IAudioClient::GetCurrentPadding
- IAudioClient::GetService
- IAudioClient::GetStreamLatency
- IAudioClient::Resetuj
- IAudioClient::Start
- IAudioClient::Stop
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:
-
Zapisuje dane renderowania w buforze punktu końcowego renderowania audio.
-
Odczytuje przechwycone dane z buforu punktu końcowego przechwytywania audio.
-
Komunikuje się z menedżerem sesji audio w celu skonfigurowania sesji audio skojarzonej ze strumieniem i zarządzania nią.
-
Określa poziom głośności sesji audio skojarzonej ze strumieniem.
-
Steruje poziomami głośności poszczególnych kanałów w sesji audio skojarzonej ze strumieniem.
-
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:
-
Aby otrzymywać powiadomienia o zdarzeniach, klient przekazuje wskaźnik do jego IAudioSessionEvents interfejsu IAudioSessionControl::RegisterAudioSessionNotification metody jako parametr wywołania.
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:
- o WASAPI
- renderowania strumienia
- przechwytywania strumienia
- rejestrowania sprzężenia zwrotnego
- strumieniExclusive-Mode
- odzyskiwanie po błędzie Invalid-Device
- przy użyciu urządzenia komunikacyjnego
- Routing strumienia
Tematy pokrewne