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