1
0

Fix sound playing

This commit is contained in:
Victor 2014-03-25 11:27:34 +02:00
parent b972169341
commit 1727579f84

View File

@ -1,57 +1,60 @@
package com.annimon.turrets; package com.annimon.turrets;
import com.annimon.turrets.util.ExceptionHandler; import com.annimon.turrets.util.ExceptionHandler;
import java.io.IOException; import java.io.IOException;
import java.net.URL; import java.net.URL;
import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem; import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip; import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException; import javax.sound.sampled.UnsupportedAudioFileException;
/** /**
* *
* @author aNNiMON * @author aNNiMON
*/ */
public enum Sound { public enum Sound {
CLICK("/res/click.wav"), CLICK("/res/click.wav"),
EXPLOSION_1("/res/explosion1.wav"), EXPLOSION_1("/res/explosion1.wav"),
EXPLOSION_2("/res/explosion2.wav"); EXPLOSION_2("/res/explosion2.wav");
private static boolean enabled; private static boolean enabled;
private final Clip soundClip; private final Clip soundClip;
Sound(String resource) { Sound(String resource) {
soundClip = loadClip(resource); soundClip = loadClip(resource);
} }
public static boolean isEnabled() { public static boolean isEnabled() {
return enabled; return enabled;
} }
public static void setEnabled(boolean enabled) { public static void setEnabled(boolean enabled) {
Sound.enabled = enabled; Sound.enabled = enabled;
} }
public void play() { public void play() {
if (enabled) { if (enabled && (soundClip != null)) {
soundClip.setFramePosition(0); soundClip.setFramePosition(0);
soundClip.start(); soundClip.start();
} }
} }
private Clip loadClip(String resource) { private Clip loadClip(String resource) {
Clip clip = null; Clip clip = null;
try { try {
final URL url = getClass().getResource(resource); final URL url = getClass().getResource(resource);
try (AudioInputStream ais = AudioSystem.getAudioInputStream(url)) { try (AudioInputStream ais = AudioSystem.getAudioInputStream(url)) {
clip = AudioSystem.getClip(); clip = AudioSystem.getClip();
clip.open(ais); clip.open(ais);
} }
} catch (IOException | UnsupportedAudioFileException | LineUnavailableException ex) { } catch (IllegalArgumentException iae) {
ExceptionHandler.handle(ex); Sound.setEnabled(false);
} ExceptionHandler.handle(iae);
return clip; } catch (IOException | UnsupportedAudioFileException | LineUnavailableException ex) {
} ExceptionHandler.handle(ex);
}
} return clip;
}
}