我有一个支持多个扬声器的音频卡(Creative SB X-Fi)。我想要做的是用C ++(Windows 7环境,Visual Studio IDE)编写一个程序,它将给我连接的4个扬声器之一播放一个给定的单声道wav文件。任何人都可以指出正确的方向,以实现这一目标的具体功能吗?我试图谷歌解决方案并未取得成果。感谢。
答案 0 :(得分:3)
您可以使用DirectSound通过一组环绕声扬声器播放声音。请参阅MSDN page "Sounds in 3-D"。
答案 1 :(得分:2)
我建议首先尝试Ben Voigt的答案,因为如果能够解决这个问题,它可能会更容易,更灵活。
但如果由于某种原因没有,则另一种选择如下。
基本上,当您想要从特定扬声器播放单声道.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)
(请参阅此list of speaker assignments了解订单。)
您还需要处理文件的标题,但wave file header format非常简单;您需要将NumChannels
从1更改为6,将ByteRate
从任意位置更改为相同值乘以6,类似于BlockAlign
和Subchunk2Size
。
NB我实际上没有测试过任何上述内容,但实验时间不应太长。如果它不起作用,可能需要将更新的WAVE_FORMAT_EXTENSIBLE数据添加到文件中 - 更加繁琐但仍然不太难;这是一个useful page describing these extensions to the .wav format。
答案 2 :(得分:0)