0

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

堆栈跟踪

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

请指教,谢谢

4

1 回答 1

1

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

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

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

你应该看看DirectX Tool Kit for Audio的实现。

顺便说一句,由于您使用的是 XAudio 2.7,因此您应该知道这个已知问题

于 2017-02-09T07:38:11.267 回答