我在Windows7 x86应用程序上使用XAudio2.7来渲染流式音频样本。源语音以8 8KHz、单声道和16位/采样波形格式创建。然后,我运行一个后台线程,等待语音回调并提交新的缓冲区。一切都很好,直到我停止语音和它崩溃的访问冲突异常的应用程序。创建转储文件后,我注意到XAudio2内部处理线程发生崩溃:
我试着在停止声音之前停止引擎线程,但结果是一样的。
请指教,谢谢
发布于 2017-02-09 15:38:11
什么时候释放缓冲区提交所指向的内存?请记住,您必须保持所有内存指针有效,直到语音完成对缓冲区的处理。数据由工作线程实时从应用程序内存中读取,而不是复制。
在语音上调用Stop并不意味着线程一返回就完全停止工作。如果要确保语音的所有缓冲区都已完成,请在Stop之后使用FlushSourceBuffers。
(void)voice->Stop( 0 );
(void)voice->FlushSourceBuffers(); 你应该看看DirectX Tool Kit for Audio的实现。
顺便说一句,因为你使用的是XAudio 2.7,所以你应该知道这个known issue。
https://stackoverflow.com/questions/42110910
复制相似问题