From 9192d7fc48b23bbe6bb3491165c3d60ef91aecce Mon Sep 17 00:00:00 2001 From: Fingercomp Date: Tue, 5 Aug 2025 01:04:39 +0300 Subject: [PATCH] Downmix SDC SFX sounds to mono to allow positioning to work Closes #174. --- .../sounds/minecraft/countdown_beep.ogg | Bin 6186 -> 4843 bytes .../desktop/sounds/minecraft/explosion.ogg | Bin 33955 -> 25788 bytes .../scala/ocelot/desktop/audio/AL10W.scala | 2 +- .../ocelot/desktop/audio/SoundSource.scala | 12 +++--------- .../ocelot/desktop/entity/OpenFMRadio.scala | 2 +- .../desktop/node/BoomCardFxHandler.scala | 18 +++++++++++++----- .../node/PositionalSoundSourcesNode.scala | 6 ++++++ .../desktop/node/nodes/TapeDriveNode.scala | 4 ++-- .../desktop/util/AudibleComputerAware.scala | 4 ++-- 9 files changed, 28 insertions(+), 20 deletions(-) diff --git a/src/main/resources/ocelot/desktop/sounds/minecraft/countdown_beep.ogg b/src/main/resources/ocelot/desktop/sounds/minecraft/countdown_beep.ogg index d0105c9b0754ad0d4438f186208853ae1e2b327e..85ca9c98870fb97322afa7d0497ed4023efa8ebe 100644 GIT binary patch delta 3562 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 literal 6186 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 diff --git a/src/main/resources/ocelot/desktop/sounds/minecraft/explosion.ogg b/src/main/resources/ocelot/desktop/sounds/minecraft/explosion.ogg index dc5563676fdd998778fed4a6071cf9304919f2fa..0062f0eb17fe762974ad1cbc307664f857617362 100644 GIT binary patch delta 24679 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 diff --git a/src/main/scala/ocelot/desktop/audio/AL10W.scala b/src/main/scala/ocelot/desktop/audio/AL10W.scala index 3b0c7ee..52e7e6e 100644 --- a/src/main/scala/ocelot/desktop/audio/AL10W.scala +++ b/src/main/scala/ocelot/desktop/audio/AL10W.scala @@ -21,7 +21,7 @@ object AL10W extends Logging { val exc = OpenAlException(func, errName, err) if (Settings.get.logAudioErrorStacktrace) { - logger.error(exc) + logger.error(exc.getMessage, exc) } else { logger.error(exc.getMessage) } diff --git a/src/main/scala/ocelot/desktop/audio/SoundSource.scala b/src/main/scala/ocelot/desktop/audio/SoundSource.scala index 0081f61..44b45b4 100644 --- a/src/main/scala/ocelot/desktop/audio/SoundSource.scala +++ b/src/main/scala/ocelot/desktop/audio/SoundSource.scala @@ -34,15 +34,15 @@ class SoundSource( Audio.getSourceStatus(this) } - def isPlaying: Boolean = { + def playing: Boolean = { status == SoundSource.Status.Playing } - def isPaused: Boolean = { + def paused: Boolean = { status == SoundSource.Status.Paused } - def isStopped: Boolean = { + def stopped: Boolean = { status == SoundSource.Status.Stopped } @@ -124,15 +124,9 @@ object SoundSource { SoundSource.fromBuffer(SoundBuffers.MinecraftClickRelease, SoundCategory.Interface) } - lazy val MinecraftExplosion: SoundSource = - SoundSource.fromBuffer(SoundBuffers.MinecraftExplosion, SoundCategory.Environment) - lazy val MachineFloppyInsert: SoundSource = SoundSource.fromBuffer(SoundBuffers.MachineFloppyInsert, SoundCategory.Environment) lazy val MachineFloppyEject: SoundSource = SoundSource.fromBuffer(SoundBuffers.MachineFloppyEject, SoundCategory.Environment) - - lazy val SelfDestructingCardCountdownBeep: SoundSource = - SoundSource.fromBuffer(SoundBuffers.SelfDestructingCardCountdownBeep, SoundCategory.Environment) } diff --git a/src/main/scala/ocelot/desktop/entity/OpenFMRadio.scala b/src/main/scala/ocelot/desktop/entity/OpenFMRadio.scala index cd93ba6..0153c38 100644 --- a/src/main/scala/ocelot/desktop/entity/OpenFMRadio.scala +++ b/src/main/scala/ocelot/desktop/entity/OpenFMRadio.scala @@ -152,7 +152,7 @@ class OpenFMRadio extends Entity with Environment with DeviceInfo with Logging { } def isPlaying: Boolean = - playbackSoundSource.isDefined && playbackSoundSource.get.isPlaying || playbackThread.isDefined + playbackSoundSource.isDefined && playbackSoundSource.get.playing || playbackThread.isDefined @Callback() def start(context: Context, args: Arguments): Array[AnyRef] = diff --git a/src/main/scala/ocelot/desktop/node/BoomCardFxHandler.scala b/src/main/scala/ocelot/desktop/node/BoomCardFxHandler.scala index 2db727c..9a5cf0c 100644 --- a/src/main/scala/ocelot/desktop/node/BoomCardFxHandler.scala +++ b/src/main/scala/ocelot/desktop/node/BoomCardFxHandler.scala @@ -1,6 +1,6 @@ package ocelot.desktop.node -import ocelot.desktop.audio.SoundSource +import ocelot.desktop.audio.{SoundBuffers, SoundCategory, SoundSource} import ocelot.desktop.color.Color import ocelot.desktop.geometry.FloatUtils.ExtendedFloat import ocelot.desktop.graphics.{Graphics, IconSource} @@ -14,15 +14,23 @@ import totoro.ocelot.brain.event.SelfDestructingCardBoomEvent trait BoomCardFxHandler extends Node with PositionalSoundSourcesNode with SmokeParticleNode { private var boomPhase: Float = -1 + private lazy val explosionSound = { + SoundSource.fromBuffer(SoundBuffers.MinecraftExplosion, SoundCategory.Environment) + } + + private lazy val countdownBeepSound = { + SoundSource.fromBuffer(SoundBuffers.SelfDestructingCardCountdownBeep, SoundCategory.Environment) + } + override def soundSources: Seq[SoundSource] = super.soundSources ++ Seq( - SoundSource.MinecraftExplosion, - SoundSource.SelfDestructingCardCountdownBeep, + explosionSound, + countdownBeepSound, ) eventHandlers += { case BrainEvent(_: SelfDestructingCardBoomEvent) => OcelotDesktop.updateThreadTasks.add(() => { - SoundSource.MinecraftExplosion.play() + explosionSound.play() emitSmoke() destroy() }) @@ -44,7 +52,7 @@ trait BoomCardFxHandler extends Node with PositionalSoundSourcesNode with SmokeP boomPhase = boomPhase.max(1 - item.card.time.toFloat / item.card.initialTime) if (item.card.lastBeepTime < 0 || item.card.lastBeepTime - item.card.time >= 20) { - SoundSource.SelfDestructingCardCountdownBeep.play() + countdownBeepSound.play() item.card.lastBeepTime = item.card.time flickerPhase = FlickerDuty } diff --git a/src/main/scala/ocelot/desktop/node/PositionalSoundSourcesNode.scala b/src/main/scala/ocelot/desktop/node/PositionalSoundSourcesNode.scala index 377c24e..dfce7a5 100644 --- a/src/main/scala/ocelot/desktop/node/PositionalSoundSourcesNode.scala +++ b/src/main/scala/ocelot/desktop/node/PositionalSoundSourcesNode.scala @@ -4,6 +4,12 @@ import ocelot.desktop.audio.SoundSource import ocelot.desktop.geometry.Vector3D import ocelot.desktop.{OcelotDesktop, Settings} +/** + * Updates sound sources' position depending on where the camera is. + * + * @note OpenAL only applies positioning to mono sources! + * If your source is stereo, this trait will have no audible effect. + */ trait PositionalSoundSourcesNode extends Node { // Every node can have multiple sound sources playing at the same time def soundSources: Seq[SoundSource] = Seq() diff --git a/src/main/scala/ocelot/desktop/node/nodes/TapeDriveNode.scala b/src/main/scala/ocelot/desktop/node/nodes/TapeDriveNode.scala index f097b64..92cac49 100644 --- a/src/main/scala/ocelot/desktop/node/nodes/TapeDriveNode.scala +++ b/src/main/scala/ocelot/desktop/node/nodes/TapeDriveNode.scala @@ -57,9 +57,9 @@ class TapeDriveNode(val tapeDrive: TapeDrive) val isRewinding = tapeDrive.state.state == TapeDriveState.State.Rewinding || tapeDrive.state.state == TapeDriveState.State.Forwarding - if (!isRewinding && soundTapeRewind.isPlaying) { + if (!isRewinding && soundTapeRewind.playing) { soundTapeRewind.stop() - } else if (isRewinding && !soundTapeRewind.isPlaying && !Audio.isDisabled) { + } else if (isRewinding && !soundTapeRewind.playing && !Audio.isDisabled) { soundTapeRewind.play() } } diff --git a/src/main/scala/ocelot/desktop/util/AudibleComputerAware.scala b/src/main/scala/ocelot/desktop/util/AudibleComputerAware.scala index fe601a9..d12257f 100644 --- a/src/main/scala/ocelot/desktop/util/AudibleComputerAware.scala +++ b/src/main/scala/ocelot/desktop/util/AudibleComputerAware.scala @@ -10,9 +10,9 @@ trait AudibleComputerAware extends ComputerAware { ) def updateRunningSound(): Unit = { - if (!computer.machine.isRunning && soundComputerRunning.isPlaying) { + if (!computer.machine.isRunning && soundComputerRunning.playing) { soundComputerRunning.stop() - } else if (computer.machine.isRunning && !soundComputerRunning.isPlaying && !Audio.isDisabled) { + } else if (computer.machine.isRunning && !soundComputerRunning.playing && !Audio.isDisabled) { soundComputerRunning.play() } }