2012-06-25 1 views
2

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

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

ответ

1

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

Из документов, это звучит как deviceCurrentTime связан с текущей сессии аудио:

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

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

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

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

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

1

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

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

+0

Это относится к проекту, разработанному для iOS 5, поэтому я не смогу использовать эти функции. (Я смотрю видео сейчас, хотя для дальнейшего использования.) –