我听到用图形编辑器创建的DirectShow图形在音频中点击,但我的PC上的播放器软件可以顺利播放音频



我有一个DirectShow应用程序,我用Delphi 6使用DSPACK组件库构建。两天来,我一直在试图解决音频播放问题。当我运行我创建的过滤图时,我在播放中听到重复的点击声。真正令人困惑的是,我与我的过滤器图形同时创建的音频文件具有干净的连续音频,而不是间隙。所以我知道音频缓冲是正确传送的,但我所做的事情是"干扰"了"现场"播放。至少我是这么想的。我花了两天时间诊断这个问题,寻找信号量保持的时间过长(锁)或者时间戳问题,我在Stack Overflow的另一篇文章中对此进行了记录:

尽管输出文件"平滑",但在渲染DirectShow过滤器时出现口吃

几分钟前,我决定尝试使用图形编辑工具进行测试。我创建了一个非常简单的图表,包括我使用的捕获设备(VOIP电话麦克风)和我使用的渲染设备(HD ATI Rear Audio输出到耳机)。总共两个过滤器。令我惊讶的是,我听到了同样的咔哒声。所以这是一个完全不涉及我的代码的情况,我听到了点击。

然后我将图形编辑器中创建的过滤器图形中的音频渲染器更改为VOIP电话耳机。滴答声消失了。

现在我知道有一种方法可以在ATI后置音频设备上获得平滑的音频,因为它是首选的音频输出设备,从我在PC上播放的视频到我在其上播放的波文件听起来完美无瑕。那么,其他软件程序所做的事情与仅仅连接过滤器不同吗?我想知道是否HD ATI后置音频的默认模式是没有双缓冲的,也许其他软件程序知道如何启用该功能?或者他们是在做别的事情,也许使用另一个DirectShow或DirectSound过滤器或技术,例如,使音频在HD ATI Rear audio 渲染器上流畅地播放?

您可能遇到的(取决于实际的口吃)是,当您使用由不同硬件支持的捕获和播放设备时,它们的采样率略有不同。例如,您以(22050 - 2%)Hz的实际速率捕获22050 Hz,并以(22050 + 2%)Hz的硬件消耗字节播放它。

现在显然这不会顺利工作:最终播放将体验数据低于…如果您将文件保存到文件中并从文件中播放,它将顺利进行,因为文件将能够以播放设备的速率提供数据。如果捕获和播放设备是相同的硬件,它们可能使用共享的"硬件"时钟和速率匹配。

这个问题被称为"速率匹配",并在MSDN的Live Sources部分进行了讨论。

最新更新