From a069773d4a03dab518a1ab0777fe990c554fdf29 Mon Sep 17 00:00:00 2001 From: locphamtran Date: Mon, 31 Aug 2026 18:32:37 +0700 Subject: [PATCH] V45.29: fix wobble preview VST2 chord van con sau V45.28 - ring worklet bridgeAudioWorklet 48->80 block (~426ms) phu stall render loop C++ toi ~361ms do tu log (fxrt_bridge loopMax=361ms, fxrt_pump pump_gap 362ms, longtask d=346): ring 48 (256ms) van khong du -> underrun lap lai fade ve 0 = wobble; them worklet_stats log dinh ky moi ~2s vao dbg.log (preview_diag chi fire keybed/vkb, duong preview khac khong log ws= duoc) de xac minh ov/un sau fix. v=202608311832 --- app/static/js/services/bridgeAudioNode.js | 16 ++++++++++++++-- app/static/js/services/bridgeAudioWorklet.js | 16 +++++++++------- app/templates/index.html | 2 +- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/app/static/js/services/bridgeAudioNode.js b/app/static/js/services/bridgeAudioNode.js index 503f71d..5b168cc 100644 --- a/app/static/js/services/bridgeAudioNode.js +++ b/app/static/js/services/bridgeAudioNode.js @@ -17,6 +17,7 @@ var _initialized = false; var _useWorklet = false; var _workletStats = null; // stats tu worklet (overrun/underrun) — getDiag + var _statsLogAccum = 0; // dem stats messages — log dbg dinh ky (V45.29) var _dest = null; // destination gain node da noi (chong connect trung) function _getCtx() { @@ -32,7 +33,7 @@ console.warn('[BridgeAudioNode] AudioWorklet unavailable — ScriptProcessor fallback'); return false; } - var url = '/static/js/services/bridgeAudioWorklet.js?v=202608311820'; + var url = '/static/js/services/bridgeAudioWorklet.js?v=202608311832'; _ctx.audioWorklet.addModule(url).then(function () { if (!_initialized) return; // disconnect() happened while loading if (_useWorklet) return; // already set up (init retry) @@ -44,7 +45,18 @@ }); _workletNode.connect(_gainNode); _workletNode.port.onmessage = function (ev) { - if (ev.data && ev.data.type === 'stats') _workletStats = ev.data; + if (ev.data && ev.data.type === 'stats') { + _workletStats = ev.data; + // V45.29: log dinh ky worklet_stats (moi ~2s) — preview_diag chi + // fire khi bam keybed/vkb, duong preview khac khong log ws= duoc. + try { + _statsLogAccum++; + if (_statsLogAccum >= 4) { + _statsLogAccum = 0; + if (window.__dbgLog) window.__dbgLog('worklet_stats', 'ov=' + ev.data.overruns + ' un=' + ev.data.underruns + ' ring=' + ev.data.ring + ' max=' + ev.data.max); + } + } catch (e) {} + } }; _useWorklet = true; // drain pre-buffer into worklet (order preserved) diff --git a/app/static/js/services/bridgeAudioWorklet.js b/app/static/js/services/bridgeAudioWorklet.js index 4e22d34..8491d42 100644 --- a/app/static/js/services/bridgeAudioWorklet.js +++ b/app/static/js/services/bridgeAudioWorklet.js @@ -1,11 +1,13 @@ // app/static/js/services/bridgeAudioWorklet.js // VSTi crackle fix: audio sink chay tren audio thread (khong jank main thread). -// - Ring block 256 mau, toi da 48 block (~256ms @48k) — hap thu jitter pump -// (V45.28: 32->48 de dung wobble VST2 loop/tremolo khi nhan chord — chord -// nhieu voice -> render loop C++ stall dai hon ~170ms -> underrun lap lai -// (fade ve 0) nghe nhu wobble; 8->16 (V45) dung tremolo crackle, 16->32 -// (V45.27) dung crackle, 32 van chua du cho stall chord). Flush o play -// start (app.jsx) xoa ring nen do tre khong tang: ring thuong can o preview. +// - Ring block 256 mau, toi da 80 block (~426ms @48k) — hap thu jitter pump +// (V45.29: 48->80 theo log thuc te: render loop C++ stall toi ~361ms — +// fxrt_bridge loopMax=361ms, fxrt_pump pump_gap 362ms, longtask d=346 — +// ring 48 (256ms) van khong du -> underrun lap lai -> wobble chord van con. +// Lich su: 8->16 (V45) dung tremolo crackle, 16->32 (V45.27) dung crackle, +// 32->48 (V45.28) chua du stall chord, 48->80 (V45.29) phu stall ~426ms). +// Flush o play start (app.jsx) xoa ring nen do tre khong tang: ring thuong +// can o preview. // - Underrun: fade ve 0 thay vi click (hard silence). // - Resume sau silence: fade vao tu 0. // - Overrun: drop block cu nhat + crossfade tich luy — moi block drop cong @@ -17,7 +19,7 @@ class BridgeAudioSinkProcessor extends AudioWorkletProcessor { constructor() { super(); this._ring = []; - this._MAX = 48; + this._MAX = 80; this._gain = 1.0; this._lastOutL = 0.0; this._lastOutR = 0.0; diff --git a/app/templates/index.html b/app/templates/index.html index 8d3cc38..4011a33 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -40,7 +40,7 @@ - +