4

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

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

在 Linux 上,我以非常好的结果解决了这个问题snd_pcm_delay(),但我正在为 Windows 寻找一个不错的解决方案。

我看过以下内容:

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

编辑回应布拉德的评论:

  • 我对 ASIO 的印象是,它主要面向专业音频应用程序和音频鉴赏家,用户可能需要安装特殊的声卡驱动程序,而我将不得不处理许可问题。不过,就功能而言,它似乎是一个不错的选择。
4

0 回答 0