fix: AudioWorklet bridge xử lý sai frame → silence

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].
This commit is contained in:
2026-07-27 14:59:39 +07:00
parent a887db587f
commit 2c012e3348
+10 -8
View File
@@ -16,16 +16,18 @@ class FluidSynthBridge extends AudioWorkletProcessor {
const out = outputs[0]; const out = outputs[0];
if (!out) return true; if (!out) return true;
const len = out[0].length; const len = out[0].length;
const l = this.leftQ; const qL = this.leftQ;
const r = this.rightQ; const qR = this.rightQ;
let ri = 0; let fi = 0;
let si = 0;
for (let i = 0; i < len; i++) { for (let i = 0; i < len; i++) {
if (ri >= l.length) { out[0][i] = 0; out[1][i] = 0; continue; } if (fi >= qL.length) { out[0][i] = 0; out[1][i] = 0; continue; }
out[0][i] = l[ri]; out[0][i] = qL[fi][si];
out[1][i] = r[ri]; out[1][i] = qR[fi][si];
ri++; 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; return true;
} }
} }