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


Сопоставление каналов по умолчанию XAudio2

Клиент XAudio2 имеет полный контроль над сопоставлением каналов голоса с каналами каждого из своих целевых голосов. Управление сопоставлением осуществляется с помощью метода IXAudio2Voice::SetOutputMatrix. Однако в некоторых случаях XAudio2 упрощает эту задачу, настраивая матрицу отправки по умолчанию автоматически. Это делается с помощью маски канала, если таковой есть, связанной с аудиоканалами голоса. Маска канала, это сочетание битовых масок SPEAKER_xxx, как определено в X3DAudio.h и других местах. XAudio2 требует, чтобы маски каналов были равны 0 или имеют то же количество битов, что и количество каналов.

В следующей таблице показаны требования к маске канала и значения по умолчанию для форматов, поддерживаемых XAudio2.

Формат Требование маски канала Маска по умолчанию Соответствующий член структуры
ИКМ Файл может содержать маску канала Маска канала имеет значение 0 или отсутствует WAVEFORMATEXTENSIBLE.dwChannelMask или отсутствует (WAVEFORMATEX)
ADPCM Файл не содержит маску канала Маска канала по умолчанию всегда используется Нет (ADPCMWAVEFORMAT)

 

Для подмиксов и управления голосами, а также для исходных голосов без маски канала или маски канала 0, XAudio2 предполагает позиции динамиков по умолчанию в соответствии со следующей таблицей.

Каналы Неявные позиции канала
1 Всегда сопоставляется с FrontLeft и FrontRight на полной мощности в обоих динамиках (исключение для монофонических звуков)
2 FrontLeft, FrontRight (базовая стереосистемная конфигурация)
3 Передний левый, Передний правый, Низкая частота (конфигурация 2.1)
4 FrontLeft, FrontRight, BackLeft, BackRight (четырехфонический)
5 Передний левый, Передний правый, Передний центр, Боковой левый, Боковой правый (конфигурация 5.0)
6 FrontLeft, FrontRight, FrontCenter, LowFrequency, SideLeft, SideRight (конфигурация 5.1) (см. следующие замечания)
7 Передний левый, Передний правый, Центральный передний, Низкочастотный, Боковой левый, Боковой правый, Задний центральный (конфигурация 6.1)
8 Передний левый, Передний правый, Передний центральный, Низкочастотный, Задний левый, Задний правый, Боковой левый, Боковой правый (конфигурация 7.1)
9 или более Отсутствие неявных позиций (сопоставление "один к одному")

 

Если заданная пара голосов в звуковом графе не имеет позиционирования динамиков, связанных ни с исходным, ни с целевым голосом (один голос имеет более восьми каналов), ни один из голосов не будет воспроизводиться до тех пор, пока для исходного голоса явно не установлена матрица отправки с помощью метода IXAudio2Voice::SetOutputMatrix. Вызов метода IXAudio2SourceVoice::Start для любого голоса завершится ошибкой, пока вы не выполните это.

Если исходный голос и целевой голос имеют разное количество позиций динамиков и IXAudio2Voice::SetOutputMatrix не было вызвано для исходного голоса, XAudio2 отправляет каждый исходный канал в ближайший целевой динамик (или динамики), пропорционально тому, насколько они близки к предполагаемому динамику. Существует два особых случая, когда поведение по умолчанию отличается.

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

голоса

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

Получить маску канала