J'ai un scénario où j'ai quelques données de synchronisation que je reçois d'un fichier MIDI. Quand une note MIDI doit être jouée, j'ai besoin d'envoyer une commande sur UDP. Fondamentalement, j'ai des instructions qui disent "jouer note A, attendre 125ms, jouer note B, attendre 300ms, jouer note C ..." et chaque fois que je "jouer note X" j'ai besoin d'envoyer des données sur UDP. J'ai essayé d'utiliser à la fois un TimerTask et un simple thread avec une boucle qui vérifie l'heure du système et calcule combien de temps s'est écoulé et décide de jouer ou non une note basée sur cela, mais les deux méthodes semblent avoir des problèmes de timing. La TimerTask ne s'exécute pas exactement sur l'intervalle spécifié (indiqué dans la documentation), donc je reçois des messages erratiques. Le thread fonctionne mieux, mais il continue parfois de hocher ce que je suppose parce que les autres threads ont la priorité sur lui.Comment envoyer des données avec un timing précis dans l'application Android?
Y a-t-il un meilleur moyen d'envoyer ces données avec un timing plus précis? Y at-il quelque chose que je peux utiliser comme l'interface Clip en Java qui est utilisée pour jouer de l'audio?
Toute aide est très appréciée.
Alors, comment une application qui lit l'audio garde-t-elle le bon temps? Lorsqu'une application Android lit une chanson à partir d'un fichier, elle ne présente pas ce type de problème. Je ne dis pas que vous n'êtes pas correct ci-dessus, je veux juste savoir comment la lecture audio est accomplie malgré les problèmes que vous avez mentionnés – jteezy14
Pas par des données de synchronisation. Il écrit les données du fichier en mémoire. Ensuite, il indique à la carte son où se trouvent les données, et la carte son lit la mémoire et gère la sortie. C'est une simplification bien sûr (la réponse complète implique des choses comme le DMA et le recyclage des tampons), mais pour jouer de la musique, il la transmet à un autre morceau de matériel. –