核心音频(WASAPI)缓冲事件定时

时间:2014-01-26 23:40:56

标签: c++ audio wasapi

我正在使用Windows核心音频功能(主要是WASAPI)来渲染独占流,遵循独占模式流中的示例。

这会创建两个交替播放和交替填充的交替缓冲区。有一个与缓冲区完成相关的事件唤醒了线程,因此它可以重新填充刚刚完成的缓冲区。 GETPOSITION表示当当前缓冲区位于160帧缓冲区的第147帧时,线程被唤醒。这使得我有13/160的缓冲时间来获得一个新的缓冲区,填充它并释放它。我有很多计算要做,这还不够。我想我可以控制处理器,而不是在填充缓冲区时休眠,但这似乎不是正确的解决方案。

此外,即使我的进程是“PRO AUDIO”并且优先级为25,有时缓冲区完成事件仍会延迟更远,因此系统开始重放未填充的缓冲区。我还没有找到关于这个时间如何工作或如何控制的讨论。我预计缓冲区完成事件会在少量帧内到达下一个缓冲区。有人熟悉这个东西吗?要么找到解决方案还是想知道在哪里找一个?

1 个答案:

答案 0 :(得分:0)

你应该有两个主题。在主线程中,您执行所有音频处理和计算,并将结果传递给辅助线程。辅助线程的工作仅仅是等待WASAPI事件并将主线程的产品写入声卡。写出音频的线程应该不进行音频处理。