diff --git a/src/engine/audio/AudioPlayer.java b/src/engine/audio/AudioPlayer.java index ea8dc0d..4a4fb64 100644 --- a/src/engine/audio/AudioPlayer.java +++ b/src/engine/audio/AudioPlayer.java @@ -3,6 +3,7 @@ import java.io.File; import java.io.IOException; import java.util.LinkedList; +import java.util.HashMap; import java.util.Queue; import javax.sound.sampled.AudioInputStream; @@ -35,25 +36,32 @@ private void closeStream(AudioInputStream stream) { } } + private HashMap clipCache = new HashMap<>(); + private void playFile(File f) { AudioInputStream ss = null; try { - final AudioInputStream stream = AudioSystem.getAudioInputStream(f); - ss = stream; + Clip audio; + if(!clipCache.containsKey(f)) { + final AudioInputStream stream = AudioSystem.getAudioInputStream(f); + ss = stream; - final Clip audio = AudioSystem.getClip(); - audio.open(stream); - audio.addLineListener(new LineListener() { - @Override - public void update(LineEvent event) { - Type eventType = event.getType(); - if (eventType == Type.STOP || eventType == Type.CLOSE) { - audio.close(); - closeStream(stream); + audio = AudioSystem.getClip(); + audio.open(stream); + audio.addLineListener(new LineListener() { + @Override + public void update(LineEvent event) { + Type eventType = event.getType(); + if (eventType == Type.STOP || eventType == Type.CLOSE) { + audio.close(); + closeStream(stream); + } } - } - }); + }); + clipCache.put(f, audio); + } else audio = clipCache.get(f); + audio.setFramePosition(0); audio.start(); } catch(IOException ioex) {