diff --git a/SPD-classes/src/main/java/com/watabou/noosa/audio/Music.java b/SPD-classes/src/main/java/com/watabou/noosa/audio/Music.java index 2b909dd51..bc6e3bc19 100644 --- a/SPD-classes/src/main/java/com/watabou/noosa/audio/Music.java +++ b/SPD-classes/src/main/java/com/watabou/noosa/audio/Music.java @@ -129,31 +129,33 @@ public enum Music { private com.badlogic.gdx.audio.Music.OnCompletionListener trackLooper = new com.badlogic.gdx.audio.Music.OnCompletionListener() { @Override public void onCompletion(com.badlogic.gdx.audio.Music music) { - if (trackList == null || trackList.length == 0 || player.isLooping() || music != player){ - return; - } - //we do this in a separate thread to avoid graphics hitching while the music is prepared //FIXME this fixes graphics stutter but there's still some audio stutter, perhaps keep more than 1 player alive? new Thread(){ @Override public void run() { - Music.this.stop(); - - if (trackQueue.isEmpty()){ - for (int i = 0; i < trackList.length; i++){ - if (Random.Float() < trackChances[i]){ - trackQueue.add(trackList[i]); - } + synchronized (Music.INSTANCE) { + if (trackList == null || trackList.length == 0 || player.isLooping() || music != player){ + return; } - if (shuffle) Collections.shuffle(trackQueue); - } - if (!enabled || trackQueue.isEmpty()){ - return; - } + Music.this.stop(); - play(trackQueue.remove(0), trackLooper); + if (trackQueue.isEmpty()) { + for (int i = 0; i < trackList.length; i++) { + if (Random.Float() < trackChances[i]) { + trackQueue.add(trackList[i]); + } + } + if (shuffle) Collections.shuffle(trackQueue); + } + + if (!enabled || trackQueue.isEmpty()) { + return; + } + + play(trackQueue.remove(0), trackLooper); + } } }.start(); }