停止源语音后XAudio2.7崩溃

时间:2017-02-08 10:42:46

标签: xaudio2

我在Windows 7 x86应用程序上使用XAudio2.7来渲染流式音频样本。 源语音使用8KHz,单声道和每采样波形16位创建。 然后我运行一个后台线程,等待语音回调并提交新的缓冲区。一切都很好,直到我停止语音,它崩溃应用程序与访问冲突异常。创建转储文件后,我注意到XAudio2内部处理线程发生了崩溃:

Stack trace

我尝试在停止声音之前停止引擎线程,但结果是一样的。

请指教, 感谢

1 个答案:

答案 0 :(得分:1)

什么时候释放你指向缓冲区提交的内存?请记住,在语音完成处理该缓冲区之前,必须保持所有内存指针有效。工作线程实时从应用程序内存中读取数据,而不是复制。

在语音上调用Stop并不意味着线程一返回就完全停止工作。如果您想确保语音的所有缓冲区都已完成,请在FlushSourceBuffers之后使用Stop

(void)voice->Stop( 0 ); 
(void)voice->FlushSourceBuffers(); 

你应该看一下DirectX Tool Kit for Audio的实施。

  

BTW,因为你使用的是XAudio 2.7,你应该知道这个known issue