我写了一个 MFC 项目。我使用 IXAudio2 播放 wav 文件。我的代码是这样的:
pSourceVoice->SubmitSourceBuffer( &buffer );
hr = pSourceVoice->Start( 0 );
但这样我一次只能播放一个声音。它必须等待这个.wav
文件播放完毕。我可以播放第二个文件。如何播放我需要的文件而不是等待第一个结束,喜欢混合声音?我怎样才能实现这个功能?
您一次IXAudio2SourceVoice
为每个想要的“正在播放的、活跃的”声音创建一个。通常,游戏会创建数百个源声音来管理——除此之外,混音通常太混浊而无法听到。
游戏音频引擎混合了“单次”声音,这些声音只是按需播放,直到它们完成——此时释放源声音以供另一个单次声音使用——、“环境”或“音乐的声音在播放时被操纵,3D 音频定位的声音必须在每个渲染帧更新以跟踪它们发出的 3D 渲染对象。
如果您将相同的音频数据提交给两个不同的IXAudio2SourceVoice
实例,那么您会听到它被播放两次,并实时混合在一起。通常,您不会在完全相同的时刻启动它们,因为结果只是一个声音的更大版本。通常它们是在不同的时间开始的,所以你会得到重叠的播放。