我在Windows 7 x86应用程序上使用XAudio2.7来渲染流式音频样本。 源语音使用8KHz,单声道和每采样波形16位创建。 然后我运行一个后台线程,等待语音回调并提交新的缓冲区。一切都很好,直到我停止语音,它崩溃应用程序与访问冲突异常。创建转储文件后,我注意到XAudio2内部处理线程发生了崩溃:
我尝试在停止声音之前停止引擎线程,但结果是一样的。
请指教, 感谢
答案 0 :(得分:1)
什么时候释放你指向缓冲区提交的内存?请记住,在语音完成处理该缓冲区之前,必须保持所有内存指针有效。工作线程实时从应用程序内存中读取数据,而不是复制。
在语音上调用Stop
并不意味着线程一返回就完全停止工作。如果您想确保语音的所有缓冲区都已完成,请在FlushSourceBuffers
之后使用Stop
。
(void)voice->Stop( 0 );
(void)voice->FlushSourceBuffers();
你应该看一下DirectX Tool Kit for Audio的实施。
BTW,因为你使用的是XAudio 2.7,你应该知道这个known issue。