Udostępnij za pośrednictwem


Odczytywanie dźwięku wielokanałowego

[Funkcja skojarzona z tą stroną, windows Media Format 11 SDK, jest starszą funkcją. Został zastąpiony przez Source Reader i Sink Writer. Czytnik Źródła i Zapisujący Ujścia zostały zoptymalizowane pod kątem Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał Source Reader i Sink Writer zamiast Windows Media Format 11 SDK, jeśli jest to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]

Koder dekodera Windows Media Audio 9 Professional może kodować dźwięk wielokanałowy (więcej niż dwa kanały). Podczas odczytywania pliku z dźwiękiem wielokanałowym należy prawidłowo skonfigurować dane wyjściowe lub dźwięk będzie dostarczany w niższej jakości i w stereo. Aby ustawić dane wyjściowe na potrzeby dostarczania dźwięku wielokanałowego, należy ustawić dwa ustawienia wyjściowe: g_wszEnableDiscreteOutput i g_wszSpeakerConfig.

Ustawienie g_wszEnableDiscreteOutput na wartość TRUE ustawia koder-dekoder w celu dostarczania danych wyjściowych dźwięku o wysokiej rozdzielczości. Dźwięk o wysokiej rozdzielczości jest kodowany przez koder dekodera Windows Media Audio 9 z 24-bitowymi próbkami w stereo lub wielu kanałach. Jeśli to ustawienie jest false, zostanie dostarczone tylko 16-bitowe wyjście stereo.

Liczba głośników w komputerze, na którym odbywa się odtwarzanie, jest ustawiana za pomocą g_wszSpeakerConfig. To ustawienie jest wartością DWORD ustawioną na jedną z stałych DirectSound dla głośników wymienionych w poniższej tabeli. Aby rozwiązać nazwy stałych dla kompilatora, należy uwzględnić dsound.h.

Stały Wartość Opis
DirectnyWynikGłośnikaDS 0x00000000 Dźwięk jest przekazywany bezpośrednio, bez konfigurowania dla głośników.
DSSPEAKER_HEADPHONE 0x00000001 Komputer kliencki jest wyposażony w słuchawki.
DSSPEAKER_MONO 0x00000002 Komputer kliencki jest wyposażony w głośnik mono.
DSSPEAKER_QUAD 0x00000003 Komputer kliencki jest wyposażony w głośniki kwadratowe.
DSSPEAKER_STEREO 0x00000004 Komputer kliencki jest wyposażony w głośniki stereo.
DSSPEAKER_surround 0x00000005 Komputer kliencki jest wyposażony w czterokanałowe głośniki dźwiękowe.
DSSPEAKER_5POINT1 0x00000006 Komputer kliencki wyposażony jest w pięć głośników i subwoofer.
DSSPEAKER_7POINT1 0x00000007 Komputer kliencki wyposażony jest w siedem głośników i subwoofer.

 

Aby ustawić te ustawienia, użyj IWMReaderAdvanced2::SetOutputSetting.

Na koniec, aby kanały były wyprowadzane dyskretnie, bez redukcji do stereo, należy ustawić prawidłowy typ wyjścia, wykonując następujące kroki:

  1. Wywołaj IWMReader::GetOutputFormatCount, aby uzyskać liczbę obsługiwanych formatów dla odpowiednich danych wyjściowych dźwięku. Indeksy formatu wyjściowego są oparte na zera.
  2. Dla każdego obsługiwanego formatu wywołaj interfejs IWMReader::GetOutputFormat, aby pobrać interfejs IWMOutputMediaProps obiektu właściwości nośnika wyjściowego.
  3. Wywołaj IWMMediaProps::GetMediaType, aby pobrać typ multimediów.
  4. Jeśli pobrany typ nośnika jest żądanym typem wielokanałowym, ustaw go przez wywołanie IWMReader::SetOutputProps.

Po ustawieniu dyskretnych wyjść audio i konfiguracji głośnika, formaty wyjściowe wyliczane przez czytnik powinny zawierać formaty wielokanałowe, które używają struktury WAVEFORMATEXTENSIBLE. Jeśli wyliczysz formaty danych wyjściowych przed ustawieniem właściwości, zostaną uwzględnione tylko formaty z 1 lub 2 kanałami i maksymalnie 16 bitów na kanał. Podobnie jak w przypadku innych formatów audio, należy używać tylko formatów wyliczanych przez czytelnika; nie należy konfigurować własnych.

Notatka

Dźwięk wielokanałowy można wyświetlać tylko wtedy, gdy aplikacja jest uruchomiona w systemie Microsoft Windows XP lub nowszej wersji systemu Microsoft Windows.

 

Wejścia, strumienie i wyjścia

odczytywanie plików ASF

ustawienia danych wyjściowych

Praca z audio PCM High-Resolution