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 6438d652d4c..d1579a52c2f 100644 --- a/forge-gui-desktop/src/main/java/forge/sound/AudioClip.java +++ b/forge-gui-desktop/src/main/java/forge/sound/AudioClip.java @@ -87,6 +87,14 @@ public class AudioClip implements IAudioClip { getIdleClip().loop(); } + @Override + public void dispose() { + for (byte[] b : audioClips.values()) { + b = null; + } + audioClips.clear(); + } + @Override public final void stop() { for (ClipWrapper clip: clips) { diff --git a/forge-gui-mobile/src/forge/sound/AudioClip.java b/forge-gui-mobile/src/forge/sound/AudioClip.java index 139018f7357..2f3aaf81be4 100644 --- a/forge-gui-mobile/src/forge/sound/AudioClip.java +++ b/forge-gui-mobile/src/forge/sound/AudioClip.java @@ -68,6 +68,14 @@ public class AudioClip implements IAudioClip { clip.loop(); } + @Override + public void dispose() { + if (clip != null) { + clip.dispose(); + clip = null; + } + } + public final void stop() { if (clip == null) { return; diff --git a/forge-gui/src/main/java/forge/sound/IAudioClip.java b/forge-gui/src/main/java/forge/sound/IAudioClip.java index a8f1158677d..bd58489b48b 100644 --- a/forge-gui/src/main/java/forge/sound/IAudioClip.java +++ b/forge-gui/src/main/java/forge/sound/IAudioClip.java @@ -5,4 +5,5 @@ public interface IAudioClip { boolean isDone(); void stop(); void loop(); + void dispose(); } diff --git a/forge-gui/src/main/java/forge/sound/NoSoundClip.java b/forge-gui/src/main/java/forge/sound/NoSoundClip.java index 7d519bbb12f..fffca72e5fa 100644 --- a/forge-gui/src/main/java/forge/sound/NoSoundClip.java +++ b/forge-gui/src/main/java/forge/sound/NoSoundClip.java @@ -15,4 +15,7 @@ public class NoSoundClip implements IAudioClip { @Override public void loop() { } + @Override + public void dispose() { } + } diff --git a/forge-gui/src/main/java/forge/sound/SoundSystem.java b/forge-gui/src/main/java/forge/sound/SoundSystem.java index 8d70305a86e..9720da4b113 100644 --- a/forge-gui/src/main/java/forge/sound/SoundSystem.java +++ b/forge-gui/src/main/java/forge/sound/SoundSystem.java @@ -57,9 +57,9 @@ public class SoundSystem { final String resource = type.getResourceFileName(); clip = GuiBase.getInterface().createAudioClip(resource); if (clip == null) { - clip = emptySound; - } - loadedClips.put(type, clip); + return emptySound; + } else + loadedClips.put(type, clip); } return clip; } @@ -85,9 +85,9 @@ public class SoundSystem { if (null == clip) { // cache miss clip = GuiBase.getInterface().createAudioClip(fileName); if (clip == null) { - clip = emptySound; - } - loadedScriptClips.put(fileName, clip); + return emptySound; + } else + loadedScriptClips.put(fileName, clip); } return clip; } @@ -243,6 +243,7 @@ public class SoundSystem { currentTrack.dispose(); currentTrack = null; } + invalidateSoundCache(); } public void fadeModifier(float value) { @@ -288,7 +289,13 @@ public class SoundSystem { } public void invalidateSoundCache() { + for (IAudioClip c : loadedClips.values()) { + c.dispose(); + } loadedClips.clear(); + for (IAudioClip c : loadedScriptClips.values()) { + c.dispose(); + } loadedScriptClips.clear(); }