diff --git a/app/static/js/services/soundfontPlayer.js b/app/static/js/services/soundfontPlayer.js index c65387d..d684e93 100644 --- a/app/static/js/services/soundfontPlayer.js +++ b/app/static/js/services/soundfontPlayer.js @@ -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++;