gpt4 book ai didi

ios - 核心音频 iOS : Retrieving the past & future timestamps for captured & to-be-rendered samples

转载 作者:可可西里 更新时间:2023-11-01 06:09:46 25 4
gpt4 key购买 nike

问题

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

远程 I/O 单元输入总线 --> 渲染回调 --> 远程 I/O 单元输出总线

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

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

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

讨论

AudioTimeStamp 结构被传递到具有有效 mHostTimemSampleTimemRateScalar 值的渲染回调中。我不清楚这个时间戳到底反射(reflect)了什么。文档指出:

inTimeStamp The timestamp associated with this call of audio unit render.

这听起来像是代表渲染被调用的时间,但这与输入样本被捕获和输出样本将被捕获的时间有什么关系(如果有的话)被渲染?

一些在线资源谈到使用 mach_absolute_time()CACurrentMediaTime() 来计算当前主机时间,但是我似乎无法从当前建立连接主机时间到过去或 future 的主机时间。

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

So, the way CoreAudio works is that an I/O proc fires and gives you 3 time stamps: (1) Is the time stamp of the input data - if any of course. This will always be at least a buffer size in the past (2) Is the time stamp for now - when the I/O proc was woken up to run (3) Is the time stamp for the output data you will provide. This will is always some time in the future - usually it is a buffer size in the future. (http://lists.apple.com/archives/coreaudio-api/2005/Sep/msg00220.html)

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

提前致谢。

最佳答案

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

关于ios - 核心音频 iOS : Retrieving the past & future timestamps for captured & to-be-rendered samples,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19780586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com