iOS中音频文件已用时间的毫秒(和更高)精度

时间:2013-09-10 09:05:17

标签: ios core-audio avaudioplayer audiounit

我正在寻找一种低延迟的方法来找出音频文件中已经过了多少秒,以实时保证毫秒精度。根据{{​​3}},对-currentTime的调用将返回“当前播放位置的偏移量,以声音开始时的秒数衡量”,但NSTimeInterval为{{{} 1}}这意味着几分之一秒是可能的。

作为测试场景,我播放了一个音频文件,用户点按了一个按钮。播放不会暂停/停止,但是在按下按钮的那一刻,我想获得有关已用时间的信息。在实际应用中,“按钮可能会在一秒钟内被按下”多次,因此需要毫秒精度。

我的文件存储为AIFF文件,大小约为1-10分钟。理想情况下,我希望在重新开始播放时确切地找出哪个样本帧是“up-next” - 但是,这种精度水平有点过分,毫秒精度是完全可以接受的。

AVAudioPlayer的double方法是否足以实现当前播放音频文件的保证毫秒精度?或者,最好使用较低级别的API,例如iOS的Audio Units?

1 个答案:

答案 0 :(得分:3)

如果您想要亚毫秒相对时间分辨率,请使用低延迟RemoteIO音频单元配置转换为原始PCM并计算缓冲区*长度+样本。大多数iOS设备将支持256个样本的6 mS RemoteIO缓冲区,并为每个缓冲区提供回调。