我正在考虑做一些看起来很奇怪的事情来获得一个可靠的时钟。我必须将缓冲区推送到连接 WiFi 的音频输出设备,该设备本身不进行缓冲或音频时间戳仲裁。如果我不以与硬件采样器设备的时序合理匹配的定期间隔发送缓冲区,则播放会损坏并开始卡顿。
在考虑我在下面描述的“黑客”之前,我首先查看了通常的嫌疑人进行高分辨率计时。QueryPerformanceCounter 看起来不错,直到我读到硬件抽象层中的错误硬件实现以及可变 CPU 速度步进破坏 QPC 计算的复杂性。此外,Windows 多媒体计时器只能精确到 1 毫秒,这使得它在 44.1 kHz 等高采样率下的使用令人怀疑。这就是为什么我正在考虑以下内容:
CPU时钟频率和QueryPerformanceCounter错了吗?
据我所知,目前生产的每台 Windows PC 都至少有麦克风的硬件支持。我正在考虑做的是在现有捕获设备的时钟上“捎带”。我有一个 DirectShow 推送源过滤器,它是要发送到 WiFi 音频输出设备的音频的真正来源。我将强制捕获过滤器的采样率与推送源过滤器匹配。然后,我将使用信号量来锁定推送源过滤器的 FillBuffer() 调用,直到 Capture Filter 的 FillBuffer() 调用产生一个缓冲区,从而利用Capture Filter 的缓冲区计时。
我可以指望用户的 PC 上至少有一个 Capture Device 吗?此外,对整体战略的任何评论表示赞赏。