Udostępnij za pośrednictwem


Domyślne mapowanie kanału XAudio2

Klient XAudio2 ma pełną kontrolę nad mapowaniem z kanałów głosu do kanałów poszczególnych głosów docelowych. Steruje mapowaniem za pomocą metody IXAudio2Voice::SetOutputMatrix. Jednak w niektórych okolicznościach XAudio2 upraszcza to zadanie, konfigurując domyślną macierz wysyłania automatycznie. Robi to za pomocą maski kanału, jeśli taka istnieje, skojarzonej z kanałami audio przypisanymi do głosu. Maska kanału jest kombinacją masek bitowych SPEAKER_xxx zgodnie z definicją w X3DAudio.h oraz w innych miejscach. XAudio2 wymaga, aby maski kanału miały wartość 0 lub mają taką samą liczbę bitów jak liczba kanałów.

W poniższej tabeli przedstawiono wymagania dotyczące maski kanału i ustawienia domyślne formatów obsługiwanych przez XAudio2.

Format Wymaganie maski kanału Maska domyślna Odpowiedni członek struktury
PCM Plik może zawierać maskę kanału Maska kanału jest 0 lub nieobecna WAVEFORMATEXTENSIBLE.dwChannelMask lub brak (WAVEFORMATEX)
ADPCM Plik nie zawiera maski kanału Domyślna maska kanału jest zawsze używana Brak (ADPCMWAVEFORMAT)

 

W przypadku podmiksów i miksów głównych oraz głosów źródłowych bez maski kanału lub z maską kanału o wartości 0, XAudio2 przyjmuje domyślne pozycje głośników zgodnie z poniższą tabelą.

Kanały Niejawne pozycje kanału
1 Zawsze mapuje na FrontLeft i FrontRight na pełną skalę w obu głośnikach (szczególny przypadek dźwięków mono)
2 FrontLeft, FrontRight (podstawowa konfiguracja stereo)
3 FrontLeft, FrontRight, LowFrequency (konfiguracja 2.1)
4 PrzódLewy, PrzódPrawy, TyłLewy, TyłPrawy (kwadrofoniczny)
5 FrontLeft, FrontRight, FrontCenter, SideLeft, SideRight (konfiguracja 5.0)
6 FrontLeft, FrontRight, FrontCenter, LowFrequency, SideLeft, SideRight (konfiguracja 5.1) (zobacz następujące uwagi)
7 FrontLeft, FrontRight, FrontCenter, LowFrequency, SideLeft, SideRight, BackCenter (konfiguracja 6.1)
8 PrzódLewo, PrzódPrawo, PrzódŚrodek, NiskieCzęstotliwości, TyłLewo, TyłPrawo, BokLewo, BokPrawo (układ 7.1)
9 lub więcej Brak niejawnych pozycji (mapowanie jeden do jednego)

 

Jeśli dana para głosowa na grafie audio nie ma pozycji głośników skojarzonych z głosem źródłowym lub docelowym (jeden głos ma więcej niż osiem kanałów), żaden głos nie jest odtwarzalny, dopóki głos źródłowy nie ma macierzy wysyłania ustawionej jawnie przy użyciu IXAudio2Voice::SetOutputMatrix metody. Wywołanie metody IXAudio2SourceVoice::Start dla obu głosów zakończy się niepowodzeniem, dopóki nie zrobisz tego.

Jeśli głos źródłowy i głos docelowy mają różne liczby pozycji głośników i nie wywołano metody IXAudio2Voice::SetOutputMatrix na głosie źródłowym, XAudio2 wysyła każdy kanał źródłowy do najbliższego dostępnego głośnika docelowego (lub głośników), proporcjonalnie do tego, jak blisko są do zamierzonego głośnika. Istnieją dwa specjalne przypadki, w których zachowanie domyślne jest inne.

  1. Jeśli źródłowy dźwięk jest mono i jest umieszczony w SPEAKER_FRONT_CENTER lub nie ma zdefiniowanej pozycji, zawsze jest wysyłany do SPEAKER_FRONT_LEFT i SPEAKER_FRONT_RIGHT, jeśli istnieją w dźwięku wyjściowego. Jeśli nie istnieją, wraca do sytuacji domyślnej.
  2. Jeśli źródło i lokalizacja docelowa są zarówno 6-kanałowe, jak i są umieszczone w jednej ze standardowych konfiguracji głośników 5.1 (Lewa+Prawa+Środkowa+Środkowa+Sub+BackL+BackR lub Lewa+Prawa+Środkowa+Sub+SideL+SideR), kanały są mapowane przez jeden do jednego. Innymi słowy, SideLeft/Right i BackLeft/Right są traktowane równoważnie. Dzieje się tak dlatego, że wokół tych konfiguracji pojawiało się historyczne zamieszanie. Domniemaną intencją jest zawsze odwzorowanie jeden do jednego.

Głosy

Przewodnik programowania XAudio2

GetChannelMask