Сопоставление каналов по умолчанию XAudio2
Клиент XAudio2 имеет полный контроль над сопоставлением каналов голоса с каналами каждого из его целевых голосов. Он управляет сопоставлением с помощью метода IXAudio2Voice::SetOutputMatrix . Однако в некоторых случаях XAudio2 упрощает эту задачу, настраивая матрицу отправки по умолчанию автоматически. Это делается с помощью маски канала, если таковые есть, связанной с аудиоканалами голоса. Маска канала — это сочетание SPEAKER_xxx битовых масок, как определено в X3DAudio.h и в других местах. XAudio2 требует, чтобы маски каналов были равны 0 или имели то же количество битов, что и число каналов.
В следующей таблице показаны требования к маске канала и значения по умолчанию для форматов, поддерживаемых XAudio2.
Формат | Требование маски канала | Маска по умолчанию | Соответствующий элемент структуры |
---|---|---|---|
PCM | Файл может содержать маску канала | Маска канала имеет значение 0 или отсутствует | WAVEFORMATEXTENSIBLE.dwChannelMask или none (WAVEFORMATEX) |
ADPCM | Файл не содержит маску канала | Маска канала по умолчанию всегда используется | None (ADPCMWAVEFORMAT) |
Для субмикширования и овладения голосами, а также для исходных голосов без маски канала или маски канала 0, XAudio2 предполагает положение говорящего по умолчанию в соответствии со следующей таблицей.
Каналы | Неявные положения каналов |
---|---|
1 | Всегда сопоставляется с FrontLeft и FrontRight в полном масштабе в обоих динамиках (особый случай для моно звуков) |
2 | FrontLeft, FrontRight (базовая конфигурация стерео) |
3 | FrontLeft, FrontRight, LowFrequency (конфигурация 2.1) |
4 | FrontLeft, FrontRight, BackLeft, BackRight (квадрафонический) |
5 | FrontLeft, FrontRight, FrontCenter, SideLeft, SideRight (конфигурация 5.0) |
6 | FrontLeft, FrontRight, FrontCenter, LowFrequency, SideLeft, SideRight (конфигурация 5.1) (см. следующие замечания) |
7 | FrontLeft, FrontRight, FrontCenter, LowFrequency, SideLeft, SideRight, BackCenter (конфигурация 6.1) |
8 | FrontLeft, FrontRight, FrontCenter, LowFrequency, BackLeft, BackRight, SideLeft, SideRight (конфигурация 7.1) |
9 или более | Нет неявных позиций (сопоставление "один к одному") |
Если данная голосовая пара в звуковом графе не имеет позиций говорящего, связанных с исходным или целевым голосом (один голос имеет более восьми каналов), ни один голос не воспроизводим, пока исходный голос не будет явно задан матрицы отправки с помощью метода IXAudio2Voice::SetOutputMatrix . Вызов метода IXAudio2SourceVoice::Start для любого голоса завершится ошибкой, пока вы не сделаете это.
Если исходный и целевой голос имеют разное количество позиций говорящего, а IXAudio2Voice::SetOutputMatrix не был вызван в исходном голосе, XAudio2 отправляет каждый исходный канал на ближайший доступный целевой динамик (или динамики), пропорционально тому, насколько близко они находятся к целевому говорящему. Существует два особых случая, когда поведение по умолчанию отличается.
- Если исходный звук является моно и расположен в SPEAKER_FRONT_CENTER или не имеет определенной позиции, он всегда отправляется в SPEAKER_FRONT_LEFT и SPEAKER_FRONT_RIGHT, если они существуют в выходном звуке. Если они не существуют, это возвращается к обычному варианту.
- Если источник и назначение являются 6-канальными и расположены в любой из стандартных конфигураций динамиков 5.1 (Left+Right+Center+Sub+BackR или Left+Right+Center+Sub+SideL+SideR), каналы сопоставляются через один к одному. Другими словами, SideLeft/Right и BackLeft/Right обрабатываются эквивалентно. Это связано с тем, что существует историческая путаница вокруг этих настроек. Таким образом, предполагаемое намерение всегда заключается в сопоставлении одного к одному.
Связанные темы