我写了一个MFC项目。我用IXAudio2来播放wav文件。我的代码是这样的:
pSourceVoice->SubmitSourceBuffer( &buffer );
hr = pSourceVoice->Start( 0 );
但这样我一次只能播放一个声音。它必须等待此.wav
文件的播放。我可以播放第二个文件。我如何才能播放我需要的文件,而不等待第一个文件结束,喜欢混合声音?如何实现此功能?
您一次为每个想要的"播放、活动"声音创建一个IXAudio2SourceVoice
。通常情况下,游戏会产生几百个源音来管理——除此之外,混音通常太浑浊,无论如何都听不见。
游戏音频引擎混合了"一次性"声音,这些声音只需按需播放,直到它们完成——在这一点上,可以释放源声音供另一个一次性声音使用——"环境"或"音乐"声音在播放时被操纵,3D音频定位声音必须在每个渲染帧更新,以跟踪它们发出的3D渲染对象。
如果您将相同的音频数据提交给两个不同的IXAudio2SourceVoice
实例,那么您将听到它被实时混合播放两次。通常情况下,你不会在同一时刻启动它们,因为结果只是一个声音的更大版本。通常情况下,它们在不同的时间启动,因此可以进行重叠播放。
请参阅XAudio2编程指南、GitHub和DirectX音频工具包。