Je dois effectuer une action (jouer la chanson à la fois sur plusieurs appareils sans décalage) à un moment donné. Mon exigence est que l'application ne devrait utiliser aucune connection Internet. J'ai donc besoin d'un moment précis pour lire datatables (Audio)]
J'ai déjà essayé de suivre:
Vous devez d'abord synchroniser les 2 time internes des périphériques. Apparemment, l'horloge la plus précise que vous pouvez avoir sur iOS est l'heure absolue en faisant:
CFAbsoluteTime now = CFAbsoluteTimeGetCurrent();
Ensuite, vous devez envoyer cette heure du périphérique A
au périphérique B
récupérer la différence sur le périphérique B
et le renvoyer à A
, puis comparer la différence avec le time passé dans la transaction réseau. De cette façon, vous pouvez avoir une synchronisation assez précise des 2 appareils. (Ceci suppose que l'heure du réseau est symésortingque entre la request et la réponse et qu'il n'y a pas beaucoup de frais généraux sur votre calcul sur l'appareil B
).
De là, vous pouvez facilement instancier 2 AVAudioPlayer
sur les périphériques définir la chanson et appeler prepareToPlay
et enfin triggersr la méthode de jeu en fonction du timeout sur la synchronisation. Cela devrait vous donner une précision non perceptible.
Une autre voie que vous pouvez prendre est celle de placer un AudioUnit
sur le second appareil connecté au microphone afin de synchroniser la musique en conséquence au premier son émis par le périphérique.
Problème connu
Lorsque vous dormez ou attendez des intervalles de time extrêmement précis, les minuteurs peuvent être retardés jusqu'à 1 milliseconde.
Pour reference: https://developer.apple.com/library/ios/releasenotes/General/RN-iOSSDK-7.0/