From ba7c03ca5efe0a755eb21230c599c5e83f042a00 Mon Sep 17 00:00:00 2001 From: locphamtran Date: Mon, 24 Aug 2026 22:02:31 +0700 Subject: [PATCH] =?UTF-8?q?fix:=20bounce=20silent=20=E2=80=94=20AudioRouti?= =?UTF-8?q?ngEngine=20no=20longer=20full-tears-down=20sink=20on=20dest=20c?= =?UTF-8?q?hange?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit stopAllPlayback->updateSfRouting->startTrackPlayback reroutes bridge sink twice during bounce; each dest change previously called this.disconnect() = BridgeAudioNode teardown + async worklet reload, audio swallowed into _preBuffer (bounded 64 blocks) forever if worklet never reactivates -> silent WAV (only old reverb tail). Fix: rely on BridgeAudioNode.connect() re-pointing _gainNode (already handles dest switch without teardown); init() only when not ready. Add __sfDiag ROUTE + BRIDGE_AUDIO (frames/ peak/path per sec) to verify at bounce end. --- app/static/js/services/audioRoutingEngine.js | 2 +- app/static/js/services/bridgeAudioNode.js | 10 ++++++++++ app/templates/index.html | 4 ++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/static/js/services/audioRoutingEngine.js b/app/static/js/services/audioRoutingEngine.js index e25778c..d4e942b 100644 --- a/app/static/js/services/audioRoutingEngine.js +++ b/app/static/js/services/audioRoutingEngine.js @@ -24,8 +24,8 @@ // Idempotent: updateSfRouting/ensureMasteringRouting chay tren MOI keydown/ // note-on — neu da noi dung dest thi KHONG disconnect (disconnect flush ring // -> am phim dang vang bi cat). Chi doi khi dest/track thuc su khac. + if (window.__sfDiag) window.__sfDiag("ROUTE to=" + (trackId || "masterBus") + " prev=" + (this._trackId || "masterBus") + " bridgeReady=" + bridgeNode.isReady() + " conn=" + this._connected); if (this._connected && this._dest === dest && this._trackId === (trackId || null)) return true; - this.disconnect(); if (!bridgeNode.isReady()) bridgeNode.init(); bridgeNode.connect(dest); this._connected = true; diff --git a/app/static/js/services/bridgeAudioNode.js b/app/static/js/services/bridgeAudioNode.js index af6fa6b..7534a31 100644 --- a/app/static/js/services/bridgeAudioNode.js +++ b/app/static/js/services/bridgeAudioNode.js @@ -101,6 +101,16 @@ function onAudio(l, r) { if (!_initialized) init(); var blk = { l: new Float32Array(l), r: new Float32Array(r) }; + _frames = (_frames || 0) + blk.l.length; + for (var _i = 0; _i < blk.l.length; _i++) { + var _a = Math.abs(blk.l[_i]); if (_a > (_peak || 0)) _peak = _a; + var _b = Math.abs(blk.r[_i]); if (_b > (_peak || 0)) _peak = _b; + } + if (!_lastDiag || Date.now() - _lastDiag >= 1000) { + _lastDiag = Date.now(); + if (window.__sfDiag) window.__sfDiag("BRIDGE_AUDIO frames=" + _frames + " peak=" + (_peak ? (20 * Math.log10(_peak)).toFixed(1) : "-inf") + "dB path=" + (_useWorklet ? "worklet" : (_preBuffer.length ? "preBuffer" : "chunks"))); + _peak = 0; + } if (_useWorklet && _workletNode) { _workletNode.port.postMessage({ type: 'audio', l: blk.l, r: blk.r }); return; diff --git a/app/templates/index.html b/app/templates/index.html index 2c4b3a3..b4ca918 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -40,9 +40,9 @@ - + - +