AudioOutputUnitStart() 和 RemoteIO 的渲染回调之间的时间差异
Time diff between AudioOutputUnitStart() and render callbackm for RemoteIO
这是一个关于时间的 "minutia" 问题...
我正在使用 iOS 的 RemoteIO 音频单元来做事。只是想知道系统究竟是如何处理时间的:在调用 AudioOutputUnitStart() 之后,单元应该在 "on",然后下游单元将拉取渲染回调。让我猜猜:
可能性 1:下一个渲染回调发生在 AudioOutputUnitStart() 执行之后,然后继续
可能性二:系统有自己的渲染回调节奏。调用 AudioOutputUnitStart() 后,下一个渲染回调捕捉到系统的一个 "next" 刻度,然后从那里开始
1个还是2个?或者有 3 个?提前致谢!
音频延迟似乎取决于特定的设备型号、音频会话和选项、请求的采样率和缓冲区大小,以及是否有任何其他音频(后台或最近关闭的应用程序)正在或最近正在播放或录制系统。内部音频放大器电路(等)是否需要上电或是否已经打开可能会产生最大的差异。由于 OS 重采样和混合器代码可能需要缓冲,因此请求某些采样率似乎也会导致额外的时间。
很有可能 (2) 或 (3)。
使用 RemoteIO 时最小化延迟的最佳方法是在音频会话设置中请求非常短的缓冲区(1 到 6 毫秒),提前启动音频会话和音频单元(在应用程序启动时,查看负载等),然后用零填充回调缓冲区(或丢弃记录的回调数据),直到您需要声音。
这是一个关于时间的 "minutia" 问题...
我正在使用 iOS 的 RemoteIO 音频单元来做事。只是想知道系统究竟是如何处理时间的:在调用 AudioOutputUnitStart() 之后,单元应该在 "on",然后下游单元将拉取渲染回调。让我猜猜:
可能性 1:下一个渲染回调发生在 AudioOutputUnitStart() 执行之后,然后继续
可能性二:系统有自己的渲染回调节奏。调用 AudioOutputUnitStart() 后,下一个渲染回调捕捉到系统的一个 "next" 刻度,然后从那里开始
1个还是2个?或者有 3 个?提前致谢!
音频延迟似乎取决于特定的设备型号、音频会话和选项、请求的采样率和缓冲区大小,以及是否有任何其他音频(后台或最近关闭的应用程序)正在或最近正在播放或录制系统。内部音频放大器电路(等)是否需要上电或是否已经打开可能会产生最大的差异。由于 OS 重采样和混合器代码可能需要缓冲,因此请求某些采样率似乎也会导致额外的时间。
很有可能 (2) 或 (3)。
使用 RemoteIO 时最小化延迟的最佳方法是在音频会话设置中请求非常短的缓冲区(1 到 6 毫秒),提前启动音频会话和音频单元(在应用程序启动时,查看负载等),然后用零填充回调缓冲区(或丢弃记录的回调数据),直到您需要声音。