协调 CACurrentMediaTime() 和 deviceCurrentTime

2024-02-24

我正在尝试同步几个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(使用前将#替换为@)

协调 CACurrentMediaTime() 和 deviceCurrentTime 的相关文章

随机推荐