Поделиться через


Сопоставление каналов по умолчанию 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 отправляет каждый исходный канал на ближайший доступный целевой динамик (или динамики), пропорционально тому, насколько близко они находятся к целевому говорящему. Существует два особых случая, когда поведение по умолчанию отличается.

  1. Если исходный звук является моно и расположен в SPEAKER_FRONT_CENTER или не имеет определенной позиции, он всегда отправляется в SPEAKER_FRONT_LEFT и SPEAKER_FRONT_RIGHT, если они существуют в выходном звуке. Если они не существуют, это возвращается к обычному варианту.
  2. Если источник и назначение являются 6-канальными и расположены в любой из стандартных конфигураций динамиков 5.1 (Left+Right+Center+Sub+BackR или Left+Right+Center+Sub+SideL+SideR), каналы сопоставляются через один к одному. Другими словами, SideLeft/Right и BackLeft/Right обрабатываются эквивалентно. Это связано с тем, что существует историческая путаница вокруг этих настроек. Таким образом, предполагаемое намерение всегда заключается в сопоставлении одного к одному.

Голоса

Руководство по программированию для XAudio2

GetChannelMask