From 0e3165ed981572674a28ee1fdf98091dc1d77eff Mon Sep 17 00:00:00 2001 From: Bas de Jong Date: Mon, 13 Oct 2025 13:45:16 +0200 Subject: [PATCH] Added linelistener to SoundEffectAsset --- .../toop/framework/audio/MusicManager.java | 2 -- .../resource/resources/SoundEffectAsset.java | 30 +++++++++++++++---- .../resource/types/AudioResource.java | 1 - 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/framework/src/main/java/org/toop/framework/audio/MusicManager.java b/framework/src/main/java/org/toop/framework/audio/MusicManager.java index e426b14..ea20e8e 100644 --- a/framework/src/main/java/org/toop/framework/audio/MusicManager.java +++ b/framework/src/main/java/org/toop/framework/audio/MusicManager.java @@ -5,8 +5,6 @@ import org.apache.logging.log4j.Logger; import org.toop.framework.dispatch.interfaces.Dispatcher; import org.toop.framework.dispatch.JavaFXDispatcher; import org.toop.annotations.TestsOnly; -import org.toop.framework.resource.ResourceManager; -import org.toop.framework.resource.resources.BaseResource; import org.toop.framework.resource.types.AudioResource; import java.util.*; diff --git a/framework/src/main/java/org/toop/framework/resource/resources/SoundEffectAsset.java b/framework/src/main/java/org/toop/framework/resource/resources/SoundEffectAsset.java index 45ffd01..df1f637 100644 --- a/framework/src/main/java/org/toop/framework/resource/resources/SoundEffectAsset.java +++ b/framework/src/main/java/org/toop/framework/resource/resources/SoundEffectAsset.java @@ -1,20 +1,19 @@ package org.toop.framework.resource.resources; import java.io.*; -import java.nio.file.Files; import javax.sound.sampled.*; import org.toop.framework.resource.types.AudioResource; import org.toop.framework.resource.types.FileExtension; import org.toop.framework.resource.types.LoadableResource; -import static javax.sound.sampled.LineEvent.Type.CLOSE; -import static javax.sound.sampled.LineEvent.Type.STOP; - @FileExtension({"wav"}) public class SoundEffectAsset extends BaseResource implements LoadableResource, AudioResource { private final Clip clip = AudioSystem.getClip(); + private LineListener onEnd = null; + private LineListener onError = null; + private double volume = 100; // TODO: Find a better way to set volume on clip load public SoundEffectAsset(final File audioFile) throws LineUnavailableException { @@ -71,6 +70,12 @@ public class SoundEffectAsset extends BaseResource implements LoadableResource, clip.close(); // Releases native resources (empties buffer) + this.getClip().removeLineListener(this.onEnd); + this.getClip().removeLineListener(this.onError); + + this.onEnd = null; + this.onError = null; + this.isLoaded = false; } @@ -105,12 +110,25 @@ public class SoundEffectAsset extends BaseResource implements LoadableResource, @Override public void setOnEnd(Runnable run) { - // TODO + this.onEnd = event -> { + if (event.getType() == LineEvent.Type.STOP) { + run.run(); + } + }; + + this.getClip().addLineListener(this.onEnd); } @Override public void setOnError(Runnable run) { - // TODO +// this.onError = event -> { +// if (event.getType() == LineEvent.Type.STOP) { +// run.run(); +// } +// }; TODO +// +// this.getClip().addLineListener(this.onEnd); + } @Override diff --git a/framework/src/main/java/org/toop/framework/resource/types/AudioResource.java b/framework/src/main/java/org/toop/framework/resource/types/AudioResource.java index d150e4a..d5d4e89 100644 --- a/framework/src/main/java/org/toop/framework/resource/types/AudioResource.java +++ b/framework/src/main/java/org/toop/framework/resource/types/AudioResource.java @@ -3,7 +3,6 @@ package org.toop.framework.resource.types; public interface AudioResource { String getName(); void updateVolume(double volume); -// boolean isPlaying(); void play(); void stop(); void setOnEnd(Runnable run);