From ad50fc9afb4c4c072094949c943f4c45e94436c8 Mon Sep 17 00:00:00 2001 From: Jage9 Date: Fri, 27 Feb 2026 01:26:10 -0500 Subject: [PATCH] Fix one-shot use-sound spatial panning updates --- client/public/version.js | 2 +- client/src/audio/audioEngine.ts | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/client/public/version.js b/client/public/version.js index 7c2450f..7d7e4c9 100644 --- a/client/public/version.js +++ b/client/public/version.js @@ -1,5 +1,5 @@ // Maintainer-controlled web client version. // Format: YYYY.MM.DD Rn (example: 2026.02.20 R2) -window.CHGRID_WEB_VERSION = "2026.02.25 R274"; +window.CHGRID_WEB_VERSION = "2026.02.25 R275"; // Optional display timezone for timestamps. Falls back to America/Detroit if unset/invalid. window.CHGRID_TIME_ZONE = "America/Detroit"; diff --git a/client/src/audio/audioEngine.ts b/client/src/audio/audioEngine.ts index 50ccaf4..b08fe0a 100644 --- a/client/src/audio/audioEngine.ts +++ b/client/src/audio/audioEngine.ts @@ -631,12 +631,14 @@ export class AudioEngine { if (initial) { sample.gainNode.gain.setTargetAtTime(gainValue, this.audioCtx.currentTime, ONE_SHOT_ATTACK_SECONDS); } else { - sample.gainNode.gain.setTargetAtTime(gainValue, this.audioCtx.currentTime, SPATIAL_TIME_CONSTANT_SECONDS); + sample.gainNode.gain.cancelScheduledValues(this.audioCtx.currentTime); + sample.gainNode.gain.linearRampToValueAtTime(gainValue, this.audioCtx.currentTime + SPATIAL_RAMP_SECONDS); } if (sample.pannerNode) { const panValue = mix?.pan ?? 0; const resolvedPan = this.outputMode === 'mono' ? 0 : Math.max(-1, Math.min(1, panValue)); - sample.pannerNode.pan.setTargetAtTime(resolvedPan, this.audioCtx.currentTime, SPATIAL_TIME_CONSTANT_SECONDS); + sample.pannerNode.pan.cancelScheduledValues(this.audioCtx.currentTime); + sample.pannerNode.pan.linearRampToValueAtTime(resolvedPan, this.audioCtx.currentTime + SPATIAL_RAMP_SECONDS); } }