Udostępnij za pośrednictwem


Formaty urządzeń

W przypadku aplikacji audio zaletą korzystania z interfejsu API audio wyższego poziomu, takiego jak DirectSound lub windows multimedia funkcje waveOutXxx, jest to, że interfejs API automatycznie konwertuje formaty strumieni używane przez aplikację i formaty używane przez urządzenie audio. Z kolei podstawowe interfejsy API audio są bardziej restrykcyjne, ponieważ wymagają strumieni aplikacji do używania formatów, które są takie same jak lub są ściśle powiązane z formatami używanymi przez urządzenie. W związku z tym aplikacje korzystające z podstawowych interfejsów API audio do odtwarzania lub rejestrowania strumieni audio mogą być wymagane do wykonania niektórych lub wszystkich konwersji między formatami strumienia.

Aplikacja, która używa interfejsu WASAPI do zarządzania strumieniami trybu udostępnionego, może polegać na aucie audio w celu przeprowadzania tylko ograniczonej konwersji formatu. Aparat audio może konwertować standardowy rozmiar próbki PCM używany przez aplikację i próbki zmiennoprzecinkowe używane przez aparat do jego wewnętrznego przetwarzania. Jednak format strumienia aplikacji zwykle musi mieć taką samą liczbę kanałów i taką samą częstotliwość próbkowania jak format strumienia używany przez urządzenie.

Jeśli aplikacja używa urządzenia w trybie wyłącznym, aplikacja musi używać formatu strumienia, który sprzęt audio jawnie obsługuje. W trybie wyłącznym aplikacja i urządzenie wymieniają dane audio bezpośrednio bez interwencji aparatu audio.

Wiele urządzeń audio obsługuje zarówno formaty strumieni PCM, jak i inne niż PCM. Jednak aparat audio może mieszać tylko strumienie PCM. W związku z tym tylko strumienie w trybie wyłącznym mogą mieć formaty inne niż PCM. Ponadto w trybie wyłącznym obsługiwane są tylko formaty inne niż PCM ze stałymi szybkościami danych. Przykładem formatu stałego spoza PCM jest strumień audio 48-kHz Windows Media Professional (WMA Pro), który przechodzi przez link cyfrowy Sony/Philips (S/PDIF) bez dekodowania. Aby uzyskać więcej informacji na temat używania strumieni WMA Pro za pośrednictwem S/PDIF, zobacz Określanie zakresów danych WMA Pro.

FUNKCJA WASAPI używa struktury WAVEFORMATEX lub WAVEFORMATEXTENSIBLE w celu określenia formatu strumienia. Struktura WAVEFORMATEXTENSIBLE jest w rzeczywistości strukturą WAVEFORMATEX rozszerzoną w celu opisania większego zakresu formatów. Dowolny format, który można opisać za pomocą autonomicznej struktury WAVEFORMATEX, można również opisać za pomocą struktury WAVEFORMATEXTENSIBLE.

Pierwszym elementem struktury WAVEFORMATEXTENSIBLE jest struktura WAVEFORMATEX. Zawartość struktury WAVEFORMATEX wskazuje, czy jest to autonomiczna struktura WAVEFORMATEX, czy część struktury WAVEFORMATEXTENSIBLE.

Autonomiczna struktura WAVEFORMATEX może odpowiednio opisać format z jednym lub dwoma kanałami i rozmiarem próbki wielokrotnym 8 bitów. Sama struktura WAVEFORMATEX nie może określać mapowania kanałów na pozycje osoby mówiącej. Ponadto chociaż WAVEFORMATEX określa rozmiar kontenera dla każdej próbki audio, nie może określić liczby bitów dokładności w próbce (na przykład 20 bitów dokładności w kontenerze 24-bitowym). Natomiast struktura WAVEFORMATEXTENSIBLE może określać zarówno mapowanie kanałów na głośniki, jak i liczbę bitów dokładności w każdej próbce.

Aby uzyskać więcej informacji na temat WAVEFORMATEX i WAVEFORMATEXTENSIBLE, zobacz dokumentację zestawu DDK systemu Windows.

Począwszy od systemu Windows 7, WAVEFORMATEXTENSIBLE został rozszerzony w celu reprezentowania formatów urządzeń do przesyłania zakodowanego dźwięku za pośrednictwem interfejsu zgodnego z IEC 61937. Aby uzyskać informacje na temat nowej struktury, zobacz Reprezentowanie formatów dla transmisji IEC 61937.

Określanie formatu urządzenia

Następujące metody WASAPI używają WAVEFORMATEX i WAVEFORMATEXTENSIBLE struktury do opisywania formatów strumienia:

Metoda GetMixFormat pobiera format strumienia używany przez aparat audio do wewnętrznego przetwarzania strumieni w trybie udostępnionym. Metoda zawsze używa struktury WAVEFORMATEXTENSIBLE zamiast autonomicznej struktury WAVEFORMATEX, aby określić format.

Metoda IsFormatSupported wskazuje, czy urządzenie punktu końcowego audio obsługuje określony format strumienia. Obiekt wywołujący musi określić, czy format strumienia jest przeznaczony do użytku w trybie udostępnionym, czy w trybie wyłącznym. W przypadku formatów trybu udostępnionego metoda wysyła zapytanie do aparatu audio w celu określenia, czy obsługuje określony format. W przypadku formatów w trybie wyłącznym metoda wysyła zapytanie do sterownika urządzenia. Niektóre sterowniki urządzeń będą zgłaszać, że obsługują 1-kanałowy lub 2-kanałowy format PCM, jeśli format jest określony przez autonomiczną strukturę WAVEFORMATEX, ale odrzuci ten sam format, jeśli jest określony przez WAVEFORMATEXTENSIBLE struktury. Aby uzyskać wiarygodne wyniki z tych sterowników, aplikacje w trybie wyłączności powinny wywoływać IsFormatSupported dwa razy dla każdego formatu PCM 1-kanałowego lub 2-kanałowego — jedno wywołanie powinno używać autonomicznej struktury WAVEFORMATEX w celu określenia formatu, a drugie wywołanie powinno używać struktury WAVEFORMATEXTENSIBLE, aby określić ten sam format.

Gdy aplikacja użyła GetMixFormat lub IsFormatSupported w celu znalezienia odpowiedniego formatu dla strumienia trybu współużytkowanego lub wyłącznego, aplikacja może wywołać metodę Initialize w celu zainicjowania strumienia przy użyciu tego formatu. Aplikacja, która próbuje zainicjować strumień trybu współużytkowanego z formatem, który nie jest identyczny z formatem mieszanym uzyskanym z metody GetMixFormat, ale ma taką samą liczbę kanałów i taką samą częstotliwość próbkowania jak format mieszany, prawdopodobnie zakończy się powodzeniem. Przed wywołaniem Initializeaplikacja może wywołać IsFormatSupported w celu sprawdzenia, czy inicjowanie zaakceptuje format.

Format mieszany używany przez aparat audio do wewnętrznego przetwarzania strumieni w trybie udostępnionym jest ściśle powiązany, ale niekoniecznie jest identyczny z formatem strumienia używanym przez urządzenie punktu końcowego audio w trybie udostępnionym. Za pomocą panelu sterowania multimediami systemu Windows Mmsys.cplużytkownik może wybrać format strumienia używany przez urządzenie punktu końcowego audio w trybie udostępnionym. Kroki są następujące:

  1. Aby uruchomić Mmsys.cpl, otwórz okno wiersza polecenia i wprowadź następujące polecenie:

    mmsys.cplsterowania

    Alternatywnie możesz uruchomić Mmsys.cpl, klikając prawym przyciskiem myszy ikonę osoby mówiącej w obszarze powiadomień, który znajduje się po prawej stronie paska zadań, a następnie wybierając pozycję Urządzenia odtwarzania lub Urządzenia nagrywania.

  2. Po otworze okna Mmsys.cpl wybierz urządzenie z listy urządzeń odtwarzania lub listy urządzeń rejestrujących, a następnie kliknij pozycję Właściwości.

  3. Po otwarciu okna właściwości kliknij przycisk Zaawansowanei wybierz format z listy dostępnych formatów w polu z etykietą Domyślny format.

Załóżmy na przykład, że użytkownik wybiera następujący format domyślny z listy dostępnych formatów dla urządzenia odtwarzania:

2 kanał, 16-bitowy, 44100 Hz (JAKOŚĆ CD)

Jest to format, który urządzenie będzie następnie używane podczas pracy w trybie udostępnionym. W systemie Windows Vista aparat audio będzie używać nieco zmodyfikowanej wersji tego formatu do wewnętrznego przetwarzania strumieni w trybie udostępnionym. Aparat audio będzie używać formatu z taką samą liczbą kanałów (dwa) i taką samą częstotliwością próbkowania (44100 Hz), ale przekonwertuje próbki na liczby zmiennoprzecinkowe przed ich przetworzeniem. Aparat audio przekonwertuje próbki zmiennoprzecinkowe w mieszance wyjściowej na 16-bitowe liczby całkowite przed odtworzeniem ich za pośrednictwem urządzenia.

Aplikacja może wysyłać zapytania dotyczące właściwości PKEY_AudioEngine_DeviceFormat urządzenia punktu końcowego audio w celu uzyskania formatu trybu udostępnionego wybranego przez użytkownika dla urządzenia. Aby uzyskać informacje na temat wykonywania zapytań dotyczących właściwości urządzenia, zobacz Właściwości urządzenia.

Niektóre aplikacje mogą znaleźć format określony przez właściwość PKEY_AudioEngine_DeviceFormat urządzenia jako odpowiedni format do otwierania strumienia trybu wyłącznego na urządzeniu. Inne aplikacje, które zarządzają strumieniami w trybie wyłącznym, mogą mieć dodatkowe wymagania, które nakazują złożone negocjowanie formatu z urządzeniem. Zazwyczaj jedna z tych aplikacji tworzy listę odpowiednich formatów z preferowanymi formatami na początku listy. Następnie aplikacja iteracyjnie wywołuje IsFormatSupported z każdym kolejnym formatem na liście, zaczynając od początku listy, aż znajdzie format obsługiwany przez urządzenie.

urządzenia punktu końcowego audio