Je développe un music programming language, et j'utilise la JVM (via Clojure) pour jouer des partitions écrites dans cette langue. Jusqu'à présent, nous utilisons simplement le MidiSynthesizer javax.sound.midi pour jouer les scores. Comme Clojure a un temps de démarrage lent et que nous voulons être capable de jouer un score depuis la ligne de commande et de l'entendre immédiatement, nous avons choisi de structurer l'interpréteur de partition comme un processus de serveur d'arrière-plan et de communiquer avec lui en utilisant un client de ligne de commande plus léger écrit en Java. Tout cela fonctionne très bien pour la plupart, cependant, il y a un problème étrange que nous voyons où si vous démarrez le serveur, puis fermez votre ordinateur portable * et laissez-le hiberner, puis l'ouvrir à nouveau et avoir le serveur joue un score, l'audio ne se produit pas immédiatement mais est retardé de plusieurs secondes. En exécutant le serveur avec la journalisation de débogage, je peux réellement voir que les événements on/off de note de MIDI se produisent immédiatement (et temporisés correctement), mais l'acoustique est retardée.Java L'audio MIDI est retardé après la sortie de l'ordinateur portable
* Ceci peut être spécifique ou non à la plate-forme. Je vois le problème sur mon Macbook Pro 2014 exécutant OS X 10.9.5 Mavericks.
Pour aider affinez, je mets ensemble cet exemple simple (en utilisant Java, pas Clojure) qui illustre le problème:
https://github.com/daveyarwood/java-midi-delayed-audio-example
J'ai été me gratter la tête sur ce pendant un certain temps maintenant . Pourquoi l'audio est-il retardé, et y a-t-il quelque chose que nous puissions faire à ce sujet?
J'ai essayé ceci et peut vérifier que cela fonctionne comme une solution de contournement! Impressionnant! –
Malheureusement, l'utilisation de ce work-around a le mauvais effet secondaire de rendre le calendrier des événements un peu moins précis. Ce n'est pas terrible, mais c'est évident dans le cas de l'application sur laquelle je travaille. Je remarque une nette différence entre la correction de la gigue étant sur et hors. –
Puisqu'il s'agit de la seule réponse que j'ai reçue, et qu'elle explique au moins le problème et une façon de le résoudre, je le considérerai comme la réponse acceptée. J'ai fait un fichier [un bug] (http://bugs.java.com/bugdatabase/view_bug.do?bug_id = JDK-8164300) avec Java, donc les doigts croisés qu'il pourrait être fixé à un moment donné. –