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