From 7c821455aafe0bbb9cc9af8fe6e6a6482dc6abeb Mon Sep 17 00:00:00 2001 From: drdev Date: Sun, 29 Jun 2014 03:22:46 +0000 Subject: [PATCH] Support switching tracks when music completes --- .../src/main/java/forge/sound/AudioClip.java | 5 ++--- .../src/main/java/forge/sound/AudioMusic.java | 2 +- forge-gui-mobile/src/forge/sound/AudioClip.java | 5 ++--- forge-gui-mobile/src/forge/sound/AudioMusic.java | 12 ++++++++++-- .../src/main/java/forge/sound/IAudioMusic.java | 2 +- .../src/main/java/forge/sound/SoundSystem.java | 14 +++++++++++++- 6 files changed, 29 insertions(+), 11 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/sound/AudioClip.java b/forge-gui-desktop/src/main/java/forge/sound/AudioClip.java index ac042e4eced..44e71df2172 100644 --- a/forge-gui-desktop/src/main/java/forge/sound/AudioClip.java +++ b/forge-gui-desktop/src/main/java/forge/sound/AudioClip.java @@ -35,7 +35,6 @@ import java.util.MissingResourceException; */ public class AudioClip implements IAudioClip { private Clip clip; - private final int SOUND_SYSTEM_DELAY = 30; public static boolean fileExists(String fileName) { File fSound = new File(ForgeConstants.SOUND_DIR, fileName); @@ -74,7 +73,7 @@ public class AudioClip implements IAudioClip { } clip.setMicrosecondPosition(0); try { - Thread.sleep(SOUND_SYSTEM_DELAY); + Thread.sleep(SoundSystem.DELAY); } catch (InterruptedException ex) { ex.printStackTrace(); } @@ -87,7 +86,7 @@ public class AudioClip implements IAudioClip { } clip.setMicrosecondPosition(0); try { - Thread.sleep(SOUND_SYSTEM_DELAY); + Thread.sleep(SoundSystem.DELAY); } catch (InterruptedException ex) { ex.printStackTrace(); } diff --git a/forge-gui-desktop/src/main/java/forge/sound/AudioMusic.java b/forge-gui-desktop/src/main/java/forge/sound/AudioMusic.java index 6b4585489ec..71b08c04d2f 100644 --- a/forge-gui-desktop/src/main/java/forge/sound/AudioMusic.java +++ b/forge-gui-desktop/src/main/java/forge/sound/AudioMusic.java @@ -5,7 +5,7 @@ public class AudioMusic implements IAudioMusic { public AudioMusic(String filename) { } - public void play() { + public void play(final Runnable onComplete) { } public void pause() { diff --git a/forge-gui-mobile/src/forge/sound/AudioClip.java b/forge-gui-mobile/src/forge/sound/AudioClip.java index 5d41853e408..f2a1ce074db 100644 --- a/forge-gui-mobile/src/forge/sound/AudioClip.java +++ b/forge-gui-mobile/src/forge/sound/AudioClip.java @@ -26,7 +26,6 @@ import com.badlogic.gdx.files.FileHandle; public class AudioClip implements IAudioClip { private Sound clip; - private final int SOUND_SYSTEM_DELAY = 30; public static AudioClip createClip(String filename) { FileHandle fileHandle = Gdx.files.absolute(ForgeConstants.SOUND_DIR + filename); @@ -48,7 +47,7 @@ public class AudioClip implements IAudioClip { return; } try { - Thread.sleep(SOUND_SYSTEM_DELAY); + Thread.sleep(SoundSystem.DELAY); } catch (InterruptedException ex) { ex.printStackTrace(); @@ -61,7 +60,7 @@ public class AudioClip implements IAudioClip { return; } try { - Thread.sleep(SOUND_SYSTEM_DELAY); + Thread.sleep(SoundSystem.DELAY); } catch (InterruptedException ex) { ex.printStackTrace(); diff --git a/forge-gui-mobile/src/forge/sound/AudioMusic.java b/forge-gui-mobile/src/forge/sound/AudioMusic.java index f6d53bd318f..068627dcfbb 100644 --- a/forge-gui-mobile/src/forge/sound/AudioMusic.java +++ b/forge-gui-mobile/src/forge/sound/AudioMusic.java @@ -2,6 +2,7 @@ package forge.sound; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.audio.Music; +import com.badlogic.gdx.audio.Music.OnCompletionListener; public class AudioMusic implements IAudioMusic { private Music music; @@ -10,7 +11,13 @@ public class AudioMusic implements IAudioMusic { music = Gdx.audio.newMusic(Gdx.files.absolute(filename)); } - public void play() { + public void play(final Runnable onComplete) { + music.setOnCompletionListener(new OnCompletionListener() { + @Override + public void onCompletion(Music music) { + onComplete.run(); + } + }); music.play(); } @@ -25,11 +32,12 @@ public class AudioMusic implements IAudioMusic { } public void stop() { + music.setOnCompletionListener(null); //prevent firing if stopped manually music.stop(); } public void dispose() { - music.stop(); + stop(); music.dispose(); } } diff --git a/forge-gui/src/main/java/forge/sound/IAudioMusic.java b/forge-gui/src/main/java/forge/sound/IAudioMusic.java index 3c99fb1a993..d5573d85e41 100644 --- a/forge-gui/src/main/java/forge/sound/IAudioMusic.java +++ b/forge-gui/src/main/java/forge/sound/IAudioMusic.java @@ -1,7 +1,7 @@ package forge.sound; public interface IAudioMusic { - void play(); + void play(final Runnable onComplete); void pause(); void resume(); void stop(); diff --git a/forge-gui/src/main/java/forge/sound/SoundSystem.java b/forge-gui/src/main/java/forge/sound/SoundSystem.java index 0c7be0302a8..0ad889f9d15 100644 --- a/forge-gui/src/main/java/forge/sound/SoundSystem.java +++ b/forge-gui/src/main/java/forge/sound/SoundSystem.java @@ -18,6 +18,7 @@ import java.util.Map; * */ public class SoundSystem { + public static final int DELAY = 30; private static final IAudioClip emptySound = new NoSoundClip(); private static final Map loadedClips = new EnumMap(SoundEffectType.class); @@ -181,7 +182,18 @@ public class SoundSystem { try { currentTrack = GuiBase.getInterface().createAudioMusic(filename); - currentTrack.play(); + currentTrack.play(new Runnable() { + @Override + public void run() { + try { + Thread.sleep(SoundSystem.DELAY); + } + catch (InterruptedException ex) { + ex.printStackTrace(); + } + changeBackgroundTrack(); //change track when music completes on its own + } + }); } catch (Exception ex) { System.err.println("Unable to load music file: " + filename);