我有一个使用 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 后置音频渲染器上流畅播放?