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

This commit is contained in:
2026-08-31 18:32:37 +07:00
parent 4ed1de638d
commit a069773d4a
3 changed files with 24 additions and 10 deletions
+9 -7
View File
@@ -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;