Согласование CACurrentMediaTime() и deviceCurrentTime

Я пытаюсь синхронизировать несколько CABasicAnimations с AVAudioPlayer. У меня проблема в том, что CABasicAnimation использует CACurrentMediaTime() в качестве ориентира при планировании анимации, а AVAudioPlayer использует deviceCurrentTime. Также для анимации используется CFTimeInterval, а для звука — NSTimeInterval (не уверен, что они являются «бесплатными мостами», как другие типы CF и NS). Я нахожу, что точки отсчета также различны.

Есть ли способ убедиться, что звуки и анимация используют одну и ту же точку отсчета?


person Andrew Lauer Barinov    schedule 25.06.2012    source источник


Ответы (2)


Я не знаю «официального» ответа, но они оба являются числами с плавающей запятой двойной точности, которые измеряют количество секунд от некоторого эталонного времени.

Судя по документам, deviceCurrentTime связан с текущим аудиосеансом:

Значение времени устройства вывода звука в секундах. (только для чтения)

@property(только для чтения) NSTimeInterval deviceCurrentTime Обсуждение Значение этого свойства монотонно увеличивается во время воспроизведения или приостановки аудиопроигрывателя.

Если к устройству вывода звука подключено более одного аудиоплеера, время устройства продолжает увеличиваться до тех пор, пока хотя бы один из плееров воспроизводится или находится в режиме паузы.

Если к устройству вывода звука не подключены аудиоплееры, которые воспроизводятся или стоят на паузе, время устройства сбрасывается на 0.

Вы должны иметь возможность начать сеанс аудиовыхода, вызвать CACurrentMediaTime(), затем получить deviceCurrentTime вашего аудиосеанса в двух последовательных операторах, а затем вычислить константу смещения для преобразования между ними. Это смещение будет точным в пределах нескольких наносекунд. Смещение будет действительным только тогда, когда сеанс аудиовыхода активен. Вам придется пересчитывать его каждый раз, когда вы удаляете все аудиоплееры из аудиосеанса.

person Duncan C    schedule 26.06.2012

Я думаю, что официальный ответ только что изменился, хотя в настоящее время он находится под соглашением о неразглашении.

См. «Что нового в Camera Capture», в частности несколько последних слайдов о функциях CMSync*. https://developer.apple.com/videos/wwdc/2012/?id =520

person Jesse Rusak    schedule 26.06.2012
comment
Это относится к проекту, разрабатываемому для iOS 5, поэтому я не смогу использовать эти функции. (Я смотрю видео сейчас, хотя для дальнейшего использования.) - person Andrew Lauer Barinov; 26.06.2012