我正在尝试同步几个CABasicAnimations
with AVAudioPlayer
。我的问题是CABasicAnimation
uses CACurrentMediaTime()
作为安排动画时的参考点AVAudioPlayer
uses deviceCurrentTime
。另外对于动画来说,CFTimeInterval
被使用,而对于声音它是NSTimeInterval
(不确定它们是否像其他 CF 和 NS 类型一样“免费桥接”)。我发现参考点也不同。
有没有办法确保声音和动画使用相同的参考点?
我不知道“官方”答案,但它们都是双精度浮点数,用于测量某个参考时间的秒数。
从文档来看,听起来 deviceCurrentTime 已链接到当前音频会话:
音频输出设备的时间值(以秒为单位)。 (只读)
@property(readonly) NSTimeInterval deviceCurrentTime 讨论
当音频播放器播放时,该属性的值单调增加
正在播放或暂停。
如果音频输出设备连接了多个音频播放器,
只要至少其中之一,设备时间就会继续增加
播放器正在播放或暂停。
如果音频输出设备没有连接的音频播放器
无论是播放还是暂停,设备时间都会恢复为 0。
您应该能够启动音频输出会话,调用 CACurrentMediaTime(),然后在 2 个连续语句中获取音频会话的 deviceCurrentTime,然后计算在它们之间进行转换的偏移常量。该偏移量将在几纳秒内准确。
该偏移仅在音频输出会话处于活动状态时才有效。每次从音频会话中删除所有音频播放器时,您都必须重新计算它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)