fix: gain 2.0 + zero buffer trước render + log get_gain thực tế

- synth.gain=2.0 (thay vì 0.5 + set_gain 1.0) để tăng volume
- Pre-zero HEAPF32 buffer trước khi gọi write_float
- Log peak, avg, và value từ _fluid_synth_get_gain để debug
This commit is contained in:
2026-07-27 15:14:49 +07:00
parent 4d2da5a272
commit 05113e17f3
+12 -5
View File
@@ -98,7 +98,7 @@
_settingsPtr = _fluidModule._new_fluid_settings();
_fluidModule._fluid_settings_setnum(_settingsPtr, "synth.sample-rate", _audioCtx.sampleRate || 44100);
_fluidModule._fluid_settings_setnum(_settingsPtr, "synth.gain", 0.5);
_fluidModule._fluid_settings_setnum(_settingsPtr, "synth.gain", 2.0);
_fluidModule._fluid_settings_setnum(_settingsPtr, "synth.polyphony", 256);
_fluidModule._fluid_settings_setint(_settingsPtr, "synth.verbose", 1);
_fluidModule._fluid_settings_setint(_settingsPtr, "synth.ladspa.active", 0);
@@ -492,17 +492,24 @@
function pushFrame() {
if (!Module || !synth || !node) return;
try {
var lpb = leftPtr >> 2;
var rpb = rightPtr >> 2;
Module.HEAPF32.fill(0, lpb, lpb + block);
Module.HEAPF32.fill(0, rpb, rpb + block);
Module._fluid_synth_write_float(synth, block, leftPtr, 0, 1, rightPtr, 0, 1);
var leftArr = new Float32Array(Module.HEAPF32.subarray(leftPtr >> 2, (leftPtr >> 2) + block));
var rightArr = new Float32Array(Module.HEAPF32.subarray(rightPtr >> 2, (rightPtr >> 2) + block));
var leftArr = new Float32Array(Module.HEAPF32.subarray(lpb, lpb + block));
var rightArr = new Float32Array(Module.HEAPF32.subarray(rpb, rpb + block));
var peak = 0;
var avg = 0;
for (var si = 0; si < leftArr.length; si++) {
var abs = leftArr[si] > 0 ? leftArr[si] : -leftArr[si];
if (abs > peak) peak = abs;
avg += abs;
}
if (peak > 0.001 && !_dbgPeak) {
avg /= leftArr.length;
if (!_dbgPeak) {
_dbgPeak = 1;
console.log("[SonicSF] FIRST AUDIO FRAME peak:", peak);
console.log("[SonicSF] FRAME peak:", peak.toFixed(6), "avg:", avg.toFixed(8), "gain check:", Module._fluid_synth_get_gain ? Module._fluid_synth_get_gain(synth) : 'N/A');
}
node.port.postMessage({ type: 'PCM', L: leftArr, R: rightArr }, [leftArr.buffer, rightArr.buffer]);
queueDepth++;