Réconcilier CACurrentMediaTime () et deviceCurrentTime

CABasicAnimations de synchroniser plusieurs CABasicAnimations avec AVAudioPlayer . Le problème que j'ai est que CABasicAnimation utilise CACurrentMediaTime() comme sharepoint reference lors de la planification des animations pendant que AVAudioPlayer utilise deviceCurrentTime . Aussi pour les animations, CFTimeInterval est utilisé, tandis que pour le son c'est NSTimeInterval (pas sûr si elles sont "sans pont" comme les autres types CF et NS). Je trouve que les points de reference sont différents aussi.

Y a-t-il un moyen de s'assurer que les sons et les animations utilisent le même sharepoint reference?

Je ne connais pas la réponse "officielle", mais ce sont deux nombres à floating point en double précision qui mesurent un certain nombre de secondes à partir d'un certain time de reference.

À partir des documents, il semble que deviceCurrentTime est lié à la session audio en cours:

La valeur temporelle, en secondes, du périphérique de sortie audio. (lecture seulement)

@property (en lecture seule) NSTimeInterval deviceCurrentTime Discussion La valeur de cette propriété augmente de façon monotone pendant la lecture ou la mise en pause d'un lecteur audio.

Si plus d'un lecteur audio est connecté au périphérique de sortie audio, la durée de l'unité continue d'augmenter tant qu'au less un des lecteurs est en cours de lecture ou en pause.

Si le périphérique de sortie audio ne comporte aucun lecteur audio connecté ou en pause, l'heure de l'appareil revient à 0.

Vous devriez être en mesure de démarrer une session de sortie audio, appelez CACurrentMediaTime (), puis obtenez le deviceCurrentTime de votre session audio en 2 instructions séquentielles, puis calculez une constante de décalage pour convertir entre elles. Ce décalage serait précis en quelques nanosecondes. Le décalage ne serait valide que lorsque la session de sortie audio est active. Vous devez le recalculer chaque fois que vous supprimez tous les lecteurs audio de la session audio.

Je pense que la réponse officielle a juste changé, bien que actuellement sous NDA.

Voir "Nouveautés de Camera Capture", en particulier les dernières diapositives sur les fonctions CMSync *. https://developer.apple.com/videos/wwdc/2012/?id=520