Mon jeu reproduit le son via la méthode habituelle:SourceDataLine.drain() se bloque sur OSX
sdl.open();
sdl.start();
sdl.write(data, 0, data.length);
sdl.drain();
sdl.stop();
sdl.close();
Et l'utilisateur peut annuler la lecture (de façon asynchrone):
sdl.stop();
Cette annulation fonctionne bien sous Windows, mais pour un utilisateur exécutant OSX 10.5.8 avec Java 6, le programme se bloque. Threaddump montre que le fil de lecture est à l'intérieur de drain(): com.sun.media.sound.MixerSourceLine.nDrain
. Si l'utilisateur n'interrompt pas le son, il se termine bien et l'application continue.
Mes questions sont les suivantes:
- Est-ce un bug Java OSX?
- Devrais-je utiliser
sdl.close()
au lieu d'arrêter? - Avez-vous des suggestions ou de l'expérience sur une solution de contournement?
Modifier: J'ai trouvé this rapport de bogue avec des effets similaires, mais la page dit il est fixé.
Cet exemple [http://stackoverflow.com/questions/2064066/does-java-have-built-in-libraries-for-audio-synthesis/2065693#2065693] se termine normalement sous Mac OSX 10.5.8 , Java 6. – trashgod
@trashgod Cet exemple n'est pas fermé de manière asynchrone. J'ai mentionné dans la question que lorsqu'il n'est pas interrompu, le son joue bien. – akarnokd
Avez-vous le même comportement en utilisant [BigClip] (http://stackoverflow.com/questions/5667454/playing-audio-file-in-java-application/5668510#5668510)? –