更改默认的DirectSound音频渲染器缓冲区大小

时间:2011-04-23 02:57:15

标签: audio directshow

我为DirectShow实现了一个自定义的“样本抓取器”过滤器。我使用我的主机应用程序获取样本,对其执行FFT,并通过Direct3D显示结果。

问题是我的视觉效果与听到音频之间有近1秒的延迟(数据在我听到之前可视化)。

我调查了它,原因是默认音频渲染器有一个内部的一秒缓冲区,如this guy.所述他声明实现IAMBufferNegotiation或IAMPushSource应该可以解决问题。我已经尝试了两种方式,似乎都没有任何区别。

我很好奇是否有其他人遇到过同样的问题,我想在编写自己的音频渲染器之前确保没有其他(简单)解决方案。

赞赏所有输入!

1 个答案:

答案 0 :(得分:1)

您必须将绘图(渲染结果)与计算FFT的缓冲区的采样时间戳同步,而不是更改音频渲染器滤镜的内部缓冲区大小。您可以使用IReferenceClock :: AdviseTime进行同步。