Added linelistener to SoundEffectAsset

This commit is contained in:
Bas de Jong
2025-10-13 13:45:16 +02:00
parent 4bcf70d4dc
commit 0e3165ed98
3 changed files with 24 additions and 9 deletions

View File

@@ -5,8 +5,6 @@ import org.apache.logging.log4j.Logger;
import org.toop.framework.dispatch.interfaces.Dispatcher; import org.toop.framework.dispatch.interfaces.Dispatcher;
import org.toop.framework.dispatch.JavaFXDispatcher; import org.toop.framework.dispatch.JavaFXDispatcher;
import org.toop.annotations.TestsOnly; 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 org.toop.framework.resource.types.AudioResource;
import java.util.*; import java.util.*;

View File

@@ -1,20 +1,19 @@
package org.toop.framework.resource.resources; package org.toop.framework.resource.resources;
import java.io.*; import java.io.*;
import java.nio.file.Files;
import javax.sound.sampled.*; import javax.sound.sampled.*;
import org.toop.framework.resource.types.AudioResource; import org.toop.framework.resource.types.AudioResource;
import org.toop.framework.resource.types.FileExtension; import org.toop.framework.resource.types.FileExtension;
import org.toop.framework.resource.types.LoadableResource; 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"}) @FileExtension({"wav"})
public class SoundEffectAsset extends BaseResource implements LoadableResource, AudioResource { public class SoundEffectAsset extends BaseResource implements LoadableResource, AudioResource {
private final Clip clip = AudioSystem.getClip(); 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 private double volume = 100; // TODO: Find a better way to set volume on clip load
public SoundEffectAsset(final File audioFile) throws LineUnavailableException { 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) 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; this.isLoaded = false;
} }
@@ -105,12 +110,25 @@ public class SoundEffectAsset extends BaseResource implements LoadableResource,
@Override @Override
public void setOnEnd(Runnable run) { public void setOnEnd(Runnable run) {
// TODO this.onEnd = event -> {
if (event.getType() == LineEvent.Type.STOP) {
run.run();
}
};
this.getClip().addLineListener(this.onEnd);
} }
@Override @Override
public void setOnError(Runnable run) { public void setOnError(Runnable run) {
// TODO // this.onError = event -> {
// if (event.getType() == LineEvent.Type.STOP) {
// run.run();
// }
// }; TODO
//
// this.getClip().addLineListener(this.onEnd);
} }
@Override @Override

View File

@@ -3,7 +3,6 @@ package org.toop.framework.resource.types;
public interface AudioResource { public interface AudioResource {
String getName(); String getName();
void updateVolume(double volume); void updateVolume(double volume);
// boolean isPlaying();
void play(); void play();
void stop(); void stop();
void setOnEnd(Runnable run); void setOnEnd(Runnable run);