iOS-应用程序后台运行的异步时钟

iOS-应用程序后台运行的异步时钟,ios,audio,core-audio,Ios,Audio,Core Audio,我正在做一个音频应用程序,我需要为不同的声音实时操纵音频缓冲区。我需要一个在后台运行的异步时钟,我可以将各种回调中的时间拉到毫秒,用于各种音频操作目的,如音频播放的停止和开始时间,以及它录制和停止录制的时间 我需要这样的精度,使我能够确定由各种进程引起的延迟,并在代码中对其进行补偿 如何在iOS中实现这样一个时钟?如果您还没有这样做,我会明确建议您研究并利用。考虑到准确性的需要,您可以忽略本机NSTimer和NSDate选项。如果您正在使用RemoteIO音频单元并从音频会话请求非常短的音频缓冲

我正在做一个音频应用程序,我需要为不同的声音实时操纵音频缓冲区。我需要一个在后台运行的异步时钟,我可以将各种回调中的时间拉到毫秒,用于各种音频操作目的,如音频播放的停止和开始时间,以及它录制和停止录制的时间

我需要这样的精度,使我能够确定由各种进程引起的延迟,并在代码中对其进行补偿


如何在iOS中实现这样一个时钟?

如果您还没有这样做,我会明确建议您研究并利用。考虑到准确性的需要,您可以忽略本机NSTimer和NSDate选项。

如果您正在使用RemoteIO音频单元并从音频会话请求非常短的音频缓冲区,然后,在回调缓冲区中计算远程回调和PCM样本似乎是将音频与亚毫秒分辨率对齐的最精确方法。其他任何东西都会被回调之间的延迟量所抵消


您也可以使用mach_time.h报头中的计时器进行相当精确的单调时间测量,但这不会与音频播放速率同步,也不会考虑子系统之间的各种延迟。

Hi hotpaw2,如何“计算”远程回调和PCM样本?您可以发布一些伪代码来说明吗?计算回调的一个简单方法是在回调中增加一个非本地计数器。这就足够了吗?所以我只是在每个回调中增加计数器,就是这样吗?它有助于知道每个回调所代表的音频持续时间。对于未压缩的音频,通常与采样数除以当前采样率成比例。啊,现在你用这种方式表达它是有意义的,谢谢!我正在使用核心音频来操纵音频缓冲区,谢谢