协调CACurrentMediaTime()和deviceCurrentTime

我正在尝试与AVAudioPlayer同步几个CABasicAnimations 。 我遇到的问题是,当AVAudioPlayer使用deviceCurrentTime时, CABasicAnimation使用CACurrentMediaTime()作为调度animation的参考点。 同样对于animation,使用CFTimeInterval ,而对于声音,它是NSTimeInterval (不知道是否像其他CF和NStypes“免费桥接”)。 我发现参考点也是不同的。

有没有办法确保声音和animation使用相同的参考点?

我不知道“官方”的答案,但他们都是双精度浮点数,从一定的参考时间测量几秒钟。

从文档中,它听起来像deviceCurrentTime链接到当前的audio会话:

audio输出设备的时间值(以秒为单位)。 (只读)

@property(只读)NSTimeInterval deviceCurrentTime Discussionaudio播放器正在播放或暂停时,此属性的值单调递增。

如果多个audio播放器连接到audio输出设备,则只要至less一个播放器正在播放或暂停,则设备时间继续递增。

如果audio输出设备没有连接正在播放或暂停的audio播放器,则设备时间将恢复为0。

你应该能够开始一个audio输出会话,调用CACurrentMediaTime()然后获取你的audio会话的deviceCurrentTime在2个连续的语句中,然后计算一个偏移常量来在它们之间进行转换。 这个抵消在几个纳秒内是准确的。 偏移仅在audio输出会话处于活动状态时有效。 每次从audio会话中删除所有audio播放器时,您都必须重新计算它。

我认为官方的答案刚刚改变,虽然目前在NDA下。

请参阅“相机捕捉中的新function”,特别是有关CMSync *function的最新幻灯片。 https://developer.apple.com/videos/wwdc/2012/?id=520