add dispose clips

This commit is contained in:
Anthony Calosa
2023-03-15 22:30:39 +08:00
parent e59bfb8a1f
commit 3a849e77ab
5 changed files with 33 additions and 6 deletions

View File

@@ -87,6 +87,14 @@ public class AudioClip implements IAudioClip {
getIdleClip().loop(); getIdleClip().loop();
} }
@Override
public void dispose() {
for (byte[] b : audioClips.values()) {
b = null;
}
audioClips.clear();
}
@Override @Override
public final void stop() { public final void stop() {
for (ClipWrapper clip: clips) { for (ClipWrapper clip: clips) {

View File

@@ -68,6 +68,14 @@ public class AudioClip implements IAudioClip {
clip.loop(); clip.loop();
} }
@Override
public void dispose() {
if (clip != null) {
clip.dispose();
clip = null;
}
}
public final void stop() { public final void stop() {
if (clip == null) { if (clip == null) {
return; return;

View File

@@ -5,4 +5,5 @@ public interface IAudioClip {
boolean isDone(); boolean isDone();
void stop(); void stop();
void loop(); void loop();
void dispose();
} }

View File

@@ -15,4 +15,7 @@ public class NoSoundClip implements IAudioClip {
@Override @Override
public void loop() { } public void loop() { }
@Override
public void dispose() { }
} }

View File

@@ -57,9 +57,9 @@ public class SoundSystem {
final String resource = type.getResourceFileName(); final String resource = type.getResourceFileName();
clip = GuiBase.getInterface().createAudioClip(resource); clip = GuiBase.getInterface().createAudioClip(resource);
if (clip == null) { if (clip == null) {
clip = emptySound; return emptySound;
} } else
loadedClips.put(type, clip); loadedClips.put(type, clip);
} }
return clip; return clip;
} }
@@ -85,9 +85,9 @@ public class SoundSystem {
if (null == clip) { // cache miss if (null == clip) { // cache miss
clip = GuiBase.getInterface().createAudioClip(fileName); clip = GuiBase.getInterface().createAudioClip(fileName);
if (clip == null) { if (clip == null) {
clip = emptySound; return emptySound;
} } else
loadedScriptClips.put(fileName, clip); loadedScriptClips.put(fileName, clip);
} }
return clip; return clip;
} }
@@ -243,6 +243,7 @@ public class SoundSystem {
currentTrack.dispose(); currentTrack.dispose();
currentTrack = null; currentTrack = null;
} }
invalidateSoundCache();
} }
public void fadeModifier(float value) { public void fadeModifier(float value) {
@@ -288,7 +289,13 @@ public class SoundSystem {
} }
public void invalidateSoundCache() { public void invalidateSoundCache() {
for (IAudioClip c : loadedClips.values()) {
c.dispose();
}
loadedClips.clear(); loadedClips.clear();
for (IAudioClip c : loadedScriptClips.values()) {
c.dispose();
}
loadedScriptClips.clear(); loadedScriptClips.clear();
} }