我有一个使用DSPACK组件库和Delphi 6一起构建的DirectShow应用程序。两天来,我一直在尝试解决音频播放的问题。运行筛选器图时,我在播放中听到重复的咔嗒声。真正令人困惑的是,我与过滤器图表同时创建的音频文件具有干净的连续音频,没有间隙。因此,我知道音频缓冲区已正确传递,但是我正在做的事情是“阻塞”“实时”播放。还是我想。我花了两天的时间来诊断问题,以寻找信号保持太长时间(锁定)或时间戳的问题,我在另一篇Stack Overflow文章中对此进行了记录:
Getting stuttering during rendering of my DirectShow filter despite output file being "smooth"
几分钟前,我决定尝试使用Graph Edit实用程序进行测试。我创建了一个简单的图形,仅包含我正在使用的捕获设备(VOIP电话麦克风)和我正在使用的渲染器设备(将HD ATI后方音频输出到耳机)组成。总共两个过滤器。 令我惊讶的是,我听到了相同的点击声。 所以这是一个根本不涉及我的代码的案例,我听到了单击的声音。
然后,将Graph Edit创建的过滤器图中的音频渲染器更改为VOIP电话听筒。点击消失了。
现在,我知道有一种方法可以在ATI Rear Audio设备上获得流畅的音频,因为它是首选的音频输出设备,从我在PC上播放的视频到在其上播放的波形文件的所有声音听起来都完美无缺。那么其他软件程序所做的事情与仅连接过滤器相比有什么不同吗?我想知道高清ATI后方音频的默认模式是否没有双缓冲,也许其他软件程序知道如何启用该功能?还是他们在做其他事情,例如使用其他DirectShow或DirectSound滤镜或技术,以使音频在HD ATI Rear Audio渲染器上流畅播放?
最佳答案
您可能拥有的(虽然取决于实际的停顿)是,当您使用由不同硬件支持的捕获和回放设备时,它们的采样率会略有不同。例如,您以实际速率(22050-2%)Hz捕获22050 Hz,然后使用硬件消耗(22050 + 2%)Hz的字节进行播放。
现在显然这将无法顺利进行:最终播放时会遇到数据不足的情况...如果将文件保存到文件中并从文件中播放,由于文件将能够以播放设备的速率提供数据,因此播放会很顺利。如果捕获和回放设备是相同的硬件,则它们可能会使用共享的“硬件”时钟和速率匹配。
该问题称为“速率匹配”,在MSDN的Live Sources部分中进行了讨论。
关于audio - 我听到点击带有使用Graph Edit创建的DirectShow图的音频,但PC上的播放器软件可以流畅地播放音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8336440/