在Windows上具有已知输出延迟的音频播放方法

时间:2014-03-15 18:10:08

标签: windows audio-streaming latency openal wasapi

我有一个C ++应用程序,它接收带时间戳的音频流,并尝试尽可能接近指定的时间戳播放音频样本。为此,我需要知道从将音频样本放入输出缓冲区直到实际听到音频时的延迟(具有合理的准确性)。

关于音频输出延迟的讨论很多,但我发现的一切都是关于最小化延迟。这与我无关,我只需要(在运行时)已知的延迟。

在Linux上,我使用snd_pcm_delay()解决了这个问题并取得了非常好的结果,但我正在寻找适合Windows的解决方案。

我看过以下内容:

  • 使用OpenAL,我测量了80毫秒的延迟,这些延迟是下落不明的。我认为这不是一个硬编码的值,我还没有找到任何API来读取延迟。 OpenAL有一些声称可以支持此功能的扩展,但据我所知,它仅在Linux上实现。
  • Wasapi有GetStreamLatency()这听起来像真正的交易,但这显然只是一些线程轮询间隔或其他东西,所以它也没用。我的机器上仍然有30ms无法计算的延迟。
  • DirectSound没有获取延迟的API?但是,我可以通过跟踪输出缓冲区来获得足够接近吗?

编辑以回应Brad的评论:

  • 我对ASIO的印象是它主要针对专业音频应用和音频鉴赏家,用户可能必须安装特殊的声卡驱动程序,我将不得不处理许可。功能方面,它似乎是一个不错的选择。

0 个答案:

没有答案