From 43c577ef17981f18d411132cd0ba0ee78a726eb9 Mon Sep 17 00:00:00 2001 From: Stef <48526421+StefBuwalda@users.noreply.github.com> Date: Mon, 6 Oct 2025 18:51:04 +0200 Subject: [PATCH] Volume slider affects clips (#127) --- .../org/toop/framework/audio/SoundManager.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/framework/src/main/java/org/toop/framework/audio/SoundManager.java b/framework/src/main/java/org/toop/framework/audio/SoundManager.java index 6614236..ff9da6b 100644 --- a/framework/src/main/java/org/toop/framework/audio/SoundManager.java +++ b/framework/src/main/java/org/toop/framework/audio/SoundManager.java @@ -75,6 +75,20 @@ public class SoundManager { for (MediaPlayer mediaPlayer : this.activeMusic) { mediaPlayer.setVolume(this.volume); } + for (Clip clip : this.activeSoundEffects.values()){ + updateClipVolume(clip); + } + } + + private void updateClipVolume(Clip clip){ + if (clip.isControlSupported(FloatControl.Type.MASTER_GAIN)){ + FloatControl volumeControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN); + float min = volumeControl.getMinimum(); + float max = volumeControl.getMaximum(); + float dB = (float) (Math.log10(Math.max(volume, 0.0001)) * 20.0); // convert linear to dB + dB = Math.max(min, Math.min(max, dB)); + volumeControl.setValue(dB); + } } private void handleGetCurrentVolume(AudioEvents.GetCurrentVolume event) { @@ -144,6 +158,9 @@ public class SoundManager { // Get a new clip from resource Clip clip = asset.getNewClip(); + // Set volume of clip + updateClipVolume(clip); + // If supposed to loop make it loop, else just start it once if (loop) { clip.loop(Clip.LOOP_CONTINUOUSLY);