我有一个DirectShow应用程序,我使用DSPACK组件库使用Delphi 6构建。两天来,我一直试图解决音频播放问题。当我运行过滤器图表时,我会在播放时听到重复的点击。真正令人困惑的是我与我的过滤器图形同时创建的音频文件具有干净的连续音频,而不是间隙。所以我知道音频缓冲器正在正常传送,但我正在做的事情是“干扰”“实时”播放。或者我想。我花了两天时间来诊断问题,寻找信号量持续时间太长(锁定)或者时间戳问题,我在其他Stack Overflow帖子中记录了这些问题:
Getting stuttering during rendering of my DirectShow filter despite output file being "smooth"
几分钟前,我决定尝试使用Graph Edit实用程序进行测试。我创建了一个简单的死图,其中包括我正在使用的捕获设备(VOIP电话麦克风)和我正在使用的渲染器设备( HD ATI Rear Audio 输出到耳机)。共有两个过滤器。 令我惊讶的是,我听到同样的点击。所以这是一个完全不涉及我的代码的案例,我听到了点击。
然后我将图形编辑创建的过滤器图形中的音频渲染器更改为 VOIP手机耳机。点击消失了。
现在我知道有一种方法可以在ATI后置音频设备上获得流畅的音频,因为它是首选的音频输出设备,从我在电脑上播放的视频到我播放的波形文件,听起来完美无瑕。那么其他软件程序做的不仅仅是连接过滤器吗?我想知道 HD ATI Rear Audio 的默认模式是否没有双缓冲,也许那些其他软件程序知道如何启用该功能?或者他们正在做其他事情,例如,使用其他DirectShow或DirectSound过滤器或技术,使音频在 HD ATI后置音频渲染器上流畅播放?
答案 0 :(得分:0)
你可能拥有的东西(取决于实际的口吃)是当你使用由不同硬件支持的捕获和回放设备时,它们的采样率略有不同。例如,您以实际速率(22050 - 2%)Hz捕获22050 Hz,然后使用硬件消耗字节(22050 + 2%)Hz进行回放。
现在很明显这将不会顺利进行:最终播放将体验数据...如果您保存到文件并从文件播放,它将顺利,因为该文件将能够以速率提供数据播放设备。如果捕获和回放设备是相同的硬件,则它们可能使用共享的“硬件”时钟和速率匹配。
此问题称为“费率匹配”,将在Live Sources部分的MSDN上进行讨论。