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

Опитвам се да синхронизирам няколко CABasicAnimations с AVAudioPlayer. Проблемът, който имам, е, че CABasicAnimation използва CACurrentMediaTime() като отправна точка при планиране на анимации, докато AVAudioPlayer използва deviceCurrentTime. Също така за анимациите се използва CFTimeInterval, докато за звука е NSTimeInterval (не съм сигурен дали са "безплатни мостови" като другите типове CF и NS). Откривам, че референтните точки също са различни.

Има ли начин да се гарантира, че звуците и анимациите използват една и съща референтна точка?


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


Отговори (2)


Не знам "официалния" отговор, но и двете са числа с плаваща запетая с двойна точност, които измерват брой секунди от някакво референтно време.

От документите звучи, че deviceCurrentTime е свързано с текущата аудио сесия:

Стойността на времето, в секунди, на аудио изходното устройство. (Само за четене)

@property(readonly) NSTimeInterval deviceCurrentTime Дискусия Стойността на това свойство нараства монотонно, докато аудиоплейърът се възпроизвежда или е на пауза.

Ако повече от един аудио плейър е свързан към аудио изходното устройство, времето на устройството продължава да се увеличава, докато поне един от плейърите възпроизвежда или е на пауза.

Ако аудио изходното устройство няма свързани аудио плейъри, които или възпроизвеждат, или са на пауза, времето на устройството се връща на 0.

Трябва да можете да стартирате сесия за аудио изход, да извикате CACurrentMediaTime(), след което да получите deviceCurrentTime на вашата аудио сесия в 2 последователни израза, след което да изчислите константа на отместване, за да преобразувате между тях. Това отместване ще бъде точно в рамките на няколко наносекунди. Отместването би било валидно само докато аудио изходната сесия е активна. Ще трябва да го преизчислявате всеки път, когато премахвате всички аудио плейъри от аудио сесията.

person Duncan C    schedule 26.06.2012

Мисля, че официалният отговор току-що се промени, въпреки че в момента е под NDA.

Вижте „Какво е новото в 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