协调CACurrentMediaTime()和deviceCurrentTime

时间:2012-06-25 23:33:32

标签: ios ios5 core-animation avaudioplayer nstimeinterval

我正在尝试将多个CABasicAnimationsAVAudioPlayer同步。我遇到的问题是CABasicAnimationCACurrentMediaTime()使用AVAudioPlayer时安排动画时使用deviceCurrentTime作为参考点。同样对于动画,使用CFTimeInterval,而对于声音它是NSTimeInterval(不确定它们是否像其他CF和NS类型一样“免费桥接”)。我发现参考点也不同。

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

2 个答案:

答案 0 :(得分:1)

我不知道“官方”答案,但它们都是双精度浮点数,可以测量一些参考时间的秒数。

从文档中,听起来deviceCurrentTime链接到当前的音频会话:

  

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

     

@property(readonly)NSTimeInterval deviceCurrentTime讨论   当音频播放器时,此属性的值会单调增加   正在播放或暂停。

     

如果音频输出设备连接了多个音频播放器,   设备时间继续递增,只要至少有一个   玩家正在玩或暂停。

     

如果音频输出设备没有连接的音频播放器   无论是播放还是暂停,设备时间都会恢复为0。

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

答案 1 :(得分:1)

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

请参阅“Camera Capture中的新功能”,特别是有关CMSync *功能的最后几张幻灯片。 https://developer.apple.com/videos/wwdc/2012/?id=520