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:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user