From 230c7ee90467f0e7867d814f392038c90587f9c7 Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Sun, 1 Jan 2023 08:51:07 +0000 Subject: [PATCH] Clamp speaker volume again Looks like this was removed in b048b6666d652dafc4614b086782f956de58d377. --- .../shared/peripheral/speaker/DfpwmState.java | 4 ++-- .../shared/peripheral/speaker/SpeakerPeripheral.java | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/projects/common/src/main/java/dan200/computercraft/shared/peripheral/speaker/DfpwmState.java b/projects/common/src/main/java/dan200/computercraft/shared/peripheral/speaker/DfpwmState.java index 07fd84feb..24839e0ad 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/peripheral/speaker/DfpwmState.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/peripheral/speaker/DfpwmState.java @@ -8,7 +8,6 @@ package dan200.computercraft.shared.peripheral.speaker; import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.api.lua.LuaTable; import dan200.computercraft.shared.util.PauseAwareTimer; -import net.minecraft.util.Mth; import javax.annotation.Nullable; import java.nio.ByteBuffer; @@ -16,6 +15,7 @@ import java.util.Optional; import java.util.concurrent.TimeUnit; import static dan200.computercraft.shared.peripheral.speaker.SpeakerPeripheral.SAMPLE_RATE; +import static dan200.computercraft.shared.peripheral.speaker.SpeakerPeripheral.clampVolume; /** * Internal state of the DFPWM decoder and the state of playback. @@ -82,7 +82,7 @@ class DfpwmState { buffer.flip(); pendingAudio = buffer; - pendingVolume = Mth.clamp(volume.orElse((double) pendingVolume).floatValue(), 0.0f, 3.0f); + pendingVolume = (float) clampVolume(volume.orElse((double) pendingVolume)); return true; } diff --git a/projects/common/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java b/projects/common/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java index 145e4126a..2f1c5d6dc 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/peripheral/speaker/SpeakerPeripheral.java @@ -27,6 +27,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundSource; +import net.minecraft.util.Mth; import net.minecraft.world.level.block.state.properties.NoteBlockInstrument; import javax.annotation.Nullable; @@ -203,7 +204,7 @@ public abstract class SpeakerPeripheral implements IPeripheral { */ @LuaFunction public final boolean playNote(ILuaContext context, String instrumentA, Optional volumeA, Optional pitchA) throws LuaException { - var volume = (float) checkFinite(1, volumeA.orElse(1.0)); + var volume = (float) clampVolume(checkFinite(1, volumeA.orElse(1.0))); var pitch = (float) checkFinite(2, pitchA.orElse(1.0)); NoteBlockInstrument instrument = null; @@ -248,7 +249,7 @@ public abstract class SpeakerPeripheral implements IPeripheral { */ @LuaFunction public final boolean playSound(ILuaContext context, String name, Optional volumeA, Optional pitchA) throws LuaException { - var volume = (float) checkFinite(1, volumeA.orElse(1.0)); + var volume = (float) clampVolume(checkFinite(1, volumeA.orElse(1.0))); var pitch = (float) checkFinite(2, pitchA.orElse(1.0)); ResourceLocation identifier; @@ -361,6 +362,10 @@ public abstract class SpeakerPeripheral implements IPeripheral { } } + static double clampVolume(double volume) { + return Mth.clamp(volume, 0, 3); + } + private record PendingSound(T sound, float volume, float pitch) { } }