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.
- 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.
- 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.
Tematy pokrewne
-
Przewodnik programowania XAudio2