WASAPI录音设备位置 - GetBuffer()vs GetPosition()

时间:2018-03-05 13:59:52

标签: c++ audio wasapi

我正在尝试准确估计录音时间戳并得到一些奇怪的行为:

  1. 最初我假设我可以依赖IAudioCaptureClient::GetBuffer返回的位置和效果计数器。我假设这些时间戳会单调增加(因为如果我在缓冲区中获得连续的音频帧,那么时间戳应该总是增加每个样本的样本数*时钟),但是时间戳似乎在漂移。重新读取MSDN注释后,我感到困惑,因为文本没有明确说明性能计数器是第一个样本的实际记录时间还是设备返回缓冲区第一个样本索引的时间。
  2. 之后我想使用IAudioClock::GetPosition。但是如果我在成功调用GetBuffer()之后每次调用它,在每次调用时性能计数器保持不变但位置更新似乎很奇怪(因为设备显然不能记录位置n和n + k同时)。我还看到了comment关于GetBuffer()的时间戳在Chromium代码中不可靠。
  3. 有人可以就如何正确解释这些值提出一些建议吗?

0 个答案:

没有答案