核心音频iOS:检索过去&捕获的未来时间戳&待渲染样本

时间:2013-11-05 01:41:33

标签: ios core-audio remoteio

问题

我有一个非常简单的iOS Core Audio应用程序,具有以下结构:

Remote I/O Unit Input Bus --> Render Callback --> Remote I/O Unit Output Bus

由远程I / O输出总线调用的渲染回调函数通过调用远程I / O输入总线上的AudioUnitRender()从输入硬件中提取样本。然后,它处理/影响这些样本,写入提供的AudioBufferList*并返回,从而导致受影响的样本通过输出硬件播放。一切顺利。

我的问题是如何知道或计算精确时间:

  • 样本由输入硬件
  • 捕获
  • 样本实际上是在输出硬件上播放的

讨论

AudioTimeStamp结构传递给有效mHostTimemSampleTime&的渲染回调。 mRateScalar值。我不清楚这个时间戳到底反映了什么。文档说明:

  

inTimeStamp   与此音频单元调用相关联的时间戳呈现。

这听起来像是表示调用渲染的时间,但是它与输入样本 捕获的时间和输出样本之间的关系如何(如果有的话)是呈现?

在线的几个资源都说使用mach_absolute_time()CACurrentMediaTime()来计算当前的主机时间,但是我似乎无法从当前主机时间到过去或将来的主机时间建立连接。 / p>

来自Apple邮件列表线程的以下引用说明了三个时间戳,包括过去输入数据和未来输出数据的单独时间戳。这正是我正在寻找的,但我相信这是在OS X上运行并使用AUHAL I / O.我找不到在iOS上检索这些时间戳的方法。

  

因此,CoreAudio的工作方式是I / O proc触发并给你3   时间戳:(1)输入数据的时间戳 - 如果有的话   课程。这将始终至少是过去的缓冲区大小(2)Is   现在的时间戳 - 当I / O proc被唤醒运行时(3)是   您将提供的输出数据的时间戳。这将是   总是在未来的某个时间 - 通常它是一个缓冲区大小   未来。 (http://lists.apple.com/archives/coreaudio-api/2005/Sep/msg00220.html

我怀疑我可能会遗漏一些明显的东西,所以希望有人可以对此有所了解。

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果您尝试考虑实际捕获时间和实际输出时间,也许您可​​以检查音频会话中的硬件延迟属性。音频单元也具有延迟属性。不确定这是否能为您提供所需的准确度。