1

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

尽管输出文件“平滑”,但在渲染我的 DirectShow 过滤器期间出现口吃

几分钟前,我决定尝试使用 Graph Edit 实用程序进行测试。我创建了一个简单的图表,其中仅包含我正在使用的捕获设备(VOIP 电话麦克风)和我正在使用的渲染器设备(HD ATI 后置音频输出到耳机)。共有两个过滤器。 令我惊讶的是,我听到了同样的咔哒声。 所以这是一个根本不涉及我的代码的案例,我听到了点击。

然后我将 Graph Edit 创建的过滤器图中的音频渲染器更改为VOIP phone earpiece。点击消失了。

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

4

1 回答 1

0

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

现在显然这不会顺利进行:最终播放会遇到数据不足...如果您保存到文件并从文件播放,它将变得顺利,因为文件将能够以播放设备的速率提供数据。如果捕获和回放设备是相同的硬件,它们很可能使用共享的“硬件”时钟和速率匹配。

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

于 2011-12-01T07:24:37.600 回答