Я предлагаю сначала попробовать ответ Бена Фойгта, так как, если это сработает, это, вероятно, будет проще и более гибким.
Но если по какой-то причине это не так, другая альтернатива выглядит следующим образом.
Как правило, когда вы хотите воспроизвести моно .wav из определенного динамика, преобразуйте его в 6-канальный .wav, который без звука на пяти каналах, но содержит данные из моно .wav на канале для динамик, на котором вы хотите играть.
Это должно быть довольно легко сделать, потому что формат файла .wav очень прост. Основная идея заключается в том, что звуковые данные в вашем моно .wav-файле будут состоять из (обычно) двухбайтовых пар для каждого аудиосэмпла, например:
1234 2ab3 def0 ce18 ....
Чтобы преобразовать эти данные в многоканальные, вам нужно вставить тишину (ноль) для других каналов. Например, для канала 0 (передний левый) вы бы использовали:
1234 0000 0000 0000 0000 0000 2ab3 0000 0000 0000 0000 0000 def0 0000 0000 0000 0000 0000 (etc)
тогда как для переднего правого вы бы использовали:
0000 1234 0000 0000 0000 0000 0000 2ab3 0000 0000 0000 0000 0000 def0 0000 0000 0000 0000 (etc)
(см. Этот список назначений докладчиков для заказа.)
Вам также необходимо иметь дело с заголовком файла, но формат заголовка волнового файла очень прост; вам нужно изменить NumChannels
с 1 на 6, ByteRate
с любого значения на то же значение, умноженное на 6, аналогично для BlockAlign
и Subchunk2Size
.
NB. На самом деле я не проверял ничего из вышеперечисленного, но экспериментирование не должно занять слишком много времени. Если это не сработает, может потребоваться добавить более новые данные WAVE_FORMAT_EXTENSIBLE в файл - более аккуратно, но все же не слишком сложно; Вот полезная страница, описывающая эти расширения в формате .wav .