From 2c012e334816c2c8a67fba69ea36486191e3ff2e Mon Sep 17 00:00:00 2001 From: 3dtours Date: Mon, 27 Jul 2026 14:59:39 +0700 Subject: [PATCH] =?UTF-8?q?fix:=20AudioWorklet=20bridge=20x=E1=BB=AD=20l?= =?UTF-8?q?=C3=BD=20sai=20frame=20=E2=86=92=20silence?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit process() gán Float32Array (cả frame 512 samples) vào out[0][i] thay vì sample riêng lẻ → NaN → silence. Fix: track fi (frame index) + si (sample index), đọc qL[fi][si]. --- app/static/js/worklets/fluidsynth-bridge.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/app/static/js/worklets/fluidsynth-bridge.js b/app/static/js/worklets/fluidsynth-bridge.js index d854394..9cb24fe 100644 --- a/app/static/js/worklets/fluidsynth-bridge.js +++ b/app/static/js/worklets/fluidsynth-bridge.js @@ -16,16 +16,18 @@ class FluidSynthBridge extends AudioWorkletProcessor { const out = outputs[0]; if (!out) return true; const len = out[0].length; - const l = this.leftQ; - const r = this.rightQ; - let ri = 0; + const qL = this.leftQ; + const qR = this.rightQ; + let fi = 0; + let si = 0; for (let i = 0; i < len; i++) { - if (ri >= l.length) { out[0][i] = 0; out[1][i] = 0; continue; } - out[0][i] = l[ri]; - out[1][i] = r[ri]; - ri++; + if (fi >= qL.length) { out[0][i] = 0; out[1][i] = 0; continue; } + out[0][i] = qL[fi][si]; + out[1][i] = qR[fi][si]; + si++; + if (si >= qL[fi].length) { fi++; si = 0; } } - if (ri > 0) { this.leftQ.splice(0, ri); this.rightQ.splice(0, ri); } + if (fi > 0) { this.leftQ.splice(0, fi); this.rightQ.splice(0, fi); } return true; } }