From 69f122d4493b04fe1d11faaf69ce149a89c5b171 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Fri, 20 Aug 2021 20:13:58 -0400 Subject: [PATCH] v1.0.1: fixed graphics stutter when tracks are switched --- .../java/com/watabou/noosa/audio/Music.java | 36 ++++++++++++------- 1 file changed, 23 insertions(+), 13 deletions(-) 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 037ade337..2b909dd51 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 @@ -29,6 +29,9 @@ import com.watabou.utils.Random; import java.awt.MediaTracker; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; public enum Music { @@ -130,22 +133,29 @@ public enum Music { return; } - stop(); + //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]); + 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); } - if (shuffle) Collections.shuffle(trackQueue); - } - - if (!enabled || trackQueue.isEmpty()){ - return; - } - - play(trackQueue.remove(0), trackLooper); + }.start(); } };