From d3b615ec0986ff270aac582390111c809b848a94 Mon Sep 17 00:00:00 2001 From: Vitroze Date: Thu, 17 Sep 2026 00:55:18 +0200 Subject: [PATCH 1/2] Fixed sound that could be heard from much too far away on certain maps. --- data_static/glide/web_audio_html.xml | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/data_static/glide/web_audio_html.xml b/data_static/glide/web_audio_html.xml index 60b7a52b..71ccdc22 100644 --- a/data_static/glide/web_audio_html.xml +++ b/data_static/glide/web_audio_html.xml @@ -239,10 +239,11 @@ class EngineStream { this.compressorNode = undefined; // Remove references to data - this.layers = undefined; + this.layers = {}; this.position = undefined; this.inputs = undefined; this.params = undefined; + this.isPlaying = false; } setPosition(x, y, z) { @@ -268,6 +269,13 @@ class EngineStream { const layer = this.layers[id]; + // Remove event handlers from the load request, if it exists + if (layer.loadRequest) { + layer.loadRequest.onload = null; + layer.loadRequest.onerror = null; + layer.loadRequest.onabort = null; + } + // Abort an existing download request, if it is active if (layer.loadRequest && layer.loadRequest.readyState < 4) { layer.loadRequest.abort(); @@ -389,7 +397,22 @@ class EngineStream { this.pannerNode.refDistance = params.fadeDist * 0.1; this.pannerNode.maxDistance = params.fadeDist; - let baseVol = params.volume * this.volumeMultiplier; + let attenuation = 1; + const listener = this.streamManager && this.streamManager.audioContext.listener; + + if (listener) { + const position = this.position; + const dx = position[0] - listener.positionX.value; + const dy = position[1] - listener.positionY.value; + const dz = position[2] - listener.positionZ.value; + const distance = Math.sqrt(dx * dx + dy * dy + dz * dz); + + const range = params.fadeDist > 0 ? params.fadeDist : 2500; + const start = range * 0.5; + attenuation = 1 - clamp((distance - start) / (range - start), 0, 1); + } + + let baseVol = params.volume * this.volumeMultiplier * attenuation; let pitch = 1; // Gear switch "wobble" From 9a6219014262583156d7e55a17b4db5f5a52d6ca Mon Sep 17 00:00:00 2001 From: Vitroze Date: Mon, 26 Oct 2026 17:37:02 +0100 Subject: [PATCH 2/2] Remove distance attenuation calculation from EngineStream class --- data_static/glide/web_audio_html.xml | 31 +++++++++------------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/data_static/glide/web_audio_html.xml b/data_static/glide/web_audio_html.xml index 71ccdc22..b0e8ff4a 100644 --- a/data_static/glide/web_audio_html.xml +++ b/data_static/glide/web_audio_html.xml @@ -144,7 +144,9 @@ debug.setValue = (id, value) => { Logic to handle each individual Engine Stream */ -let DEFAULT_STREAM_PARAMETERS = {}; +let DEFAULT_STREAM_PARAMETERS = { + fadeDist: 2500 +}; class EngineStream { constructor(id, streamManager) { @@ -196,13 +198,13 @@ class EngineStream { this.pannerNode = new PannerNode(context, { panningModel: "equalpower", //"HRTF", - distanceModel: "inverse", + distanceModel: "linear", positionX: this.position[0], positionY: this.position[1], positionZ: this.position[2], - refDistance: this.params.fadeDist * 0.1, + refDistance: this.params.fadeDist * 0.5, maxDistance: this.params.fadeDist, - rolloffFactor: 0.8 + rolloffFactor: 1.0 }); this.pannerNode.channelCount = 1; @@ -394,25 +396,12 @@ class EngineStream { const inputs = this.inputs; const params = this.params; - this.pannerNode.refDistance = params.fadeDist * 0.1; - this.pannerNode.maxDistance = params.fadeDist; - - let attenuation = 1; - const listener = this.streamManager && this.streamManager.audioContext.listener; - - if (listener) { - const position = this.position; - const dx = position[0] - listener.positionX.value; - const dy = position[1] - listener.positionY.value; - const dz = position[2] - listener.positionZ.value; - const distance = Math.sqrt(dx * dx + dy * dy + dz * dz); - - const range = params.fadeDist > 0 ? params.fadeDist : 2500; - const start = range * 0.5; - attenuation = 1 - clamp((distance - start) / (range - start), 0, 1); + if (params.fadeDist > 0) { + this.pannerNode.refDistance = params.fadeDist * 0.5; + this.pannerNode.maxDistance = params.fadeDist; } - let baseVol = params.volume * this.volumeMultiplier * attenuation; + let baseVol = params.volume * this.volumeMultiplier; let pitch = 1; // Gear switch "wobble"