Support switching tracks when music completes

This commit is contained in:
drdev
2014-06-29 03:22:46 +00:00
parent 4a78323b3c
commit 7c821455aa
6 changed files with 29 additions and 11 deletions

View File

@@ -35,7 +35,6 @@ import java.util.MissingResourceException;
*/ */
public class AudioClip implements IAudioClip { public class AudioClip implements IAudioClip {
private Clip clip; private Clip clip;
private final int SOUND_SYSTEM_DELAY = 30;
public static boolean fileExists(String fileName) { public static boolean fileExists(String fileName) {
File fSound = new File(ForgeConstants.SOUND_DIR, fileName); File fSound = new File(ForgeConstants.SOUND_DIR, fileName);
@@ -74,7 +73,7 @@ public class AudioClip implements IAudioClip {
} }
clip.setMicrosecondPosition(0); clip.setMicrosecondPosition(0);
try { try {
Thread.sleep(SOUND_SYSTEM_DELAY); Thread.sleep(SoundSystem.DELAY);
} catch (InterruptedException ex) { } catch (InterruptedException ex) {
ex.printStackTrace(); ex.printStackTrace();
} }
@@ -87,7 +86,7 @@ public class AudioClip implements IAudioClip {
} }
clip.setMicrosecondPosition(0); clip.setMicrosecondPosition(0);
try { try {
Thread.sleep(SOUND_SYSTEM_DELAY); Thread.sleep(SoundSystem.DELAY);
} catch (InterruptedException ex) { } catch (InterruptedException ex) {
ex.printStackTrace(); ex.printStackTrace();
} }

View File

@@ -5,7 +5,7 @@ public class AudioMusic implements IAudioMusic {
public AudioMusic(String filename) { public AudioMusic(String filename) {
} }
public void play() { public void play(final Runnable onComplete) {
} }
public void pause() { public void pause() {

View File

@@ -26,7 +26,6 @@ import com.badlogic.gdx.files.FileHandle;
public class AudioClip implements IAudioClip { public class AudioClip implements IAudioClip {
private Sound clip; private Sound clip;
private final int SOUND_SYSTEM_DELAY = 30;
public static AudioClip createClip(String filename) { public static AudioClip createClip(String filename) {
FileHandle fileHandle = Gdx.files.absolute(ForgeConstants.SOUND_DIR + filename); FileHandle fileHandle = Gdx.files.absolute(ForgeConstants.SOUND_DIR + filename);
@@ -48,7 +47,7 @@ public class AudioClip implements IAudioClip {
return; return;
} }
try { try {
Thread.sleep(SOUND_SYSTEM_DELAY); Thread.sleep(SoundSystem.DELAY);
} }
catch (InterruptedException ex) { catch (InterruptedException ex) {
ex.printStackTrace(); ex.printStackTrace();
@@ -61,7 +60,7 @@ public class AudioClip implements IAudioClip {
return; return;
} }
try { try {
Thread.sleep(SOUND_SYSTEM_DELAY); Thread.sleep(SoundSystem.DELAY);
} }
catch (InterruptedException ex) { catch (InterruptedException ex) {
ex.printStackTrace(); ex.printStackTrace();

View File

@@ -2,6 +2,7 @@ package forge.sound;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.audio.Music; import com.badlogic.gdx.audio.Music;
import com.badlogic.gdx.audio.Music.OnCompletionListener;
public class AudioMusic implements IAudioMusic { public class AudioMusic implements IAudioMusic {
private Music music; private Music music;
@@ -10,7 +11,13 @@ public class AudioMusic implements IAudioMusic {
music = Gdx.audio.newMusic(Gdx.files.absolute(filename)); 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(); music.play();
} }
@@ -25,11 +32,12 @@ public class AudioMusic implements IAudioMusic {
} }
public void stop() { public void stop() {
music.setOnCompletionListener(null); //prevent firing if stopped manually
music.stop(); music.stop();
} }
public void dispose() { public void dispose() {
music.stop(); stop();
music.dispose(); music.dispose();
} }
} }

View File

@@ -1,7 +1,7 @@
package forge.sound; package forge.sound;
public interface IAudioMusic { public interface IAudioMusic {
void play(); void play(final Runnable onComplete);
void pause(); void pause();
void resume(); void resume();
void stop(); void stop();

View File

@@ -18,6 +18,7 @@ import java.util.Map;
* *
*/ */
public class SoundSystem { public class SoundSystem {
public static final int DELAY = 30;
private static final IAudioClip emptySound = new NoSoundClip(); private static final IAudioClip emptySound = new NoSoundClip();
private static final Map<SoundEffectType, IAudioClip> loadedClips = new EnumMap<SoundEffectType, IAudioClip>(SoundEffectType.class); private static final Map<SoundEffectType, IAudioClip> loadedClips = new EnumMap<SoundEffectType, IAudioClip>(SoundEffectType.class);
@@ -181,7 +182,18 @@ public class SoundSystem {
try { try {
currentTrack = GuiBase.getInterface().createAudioMusic(filename); 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) { catch (Exception ex) {
System.err.println("Unable to load music file: " + filename); System.err.println("Unable to load music file: " + filename);