3dtours
34ad02dd6b
fix: crash AudioWorklet khi output mono - xử lý mọi số channel trong fluidsynth-bridge + ép stereo outputChannelCount=2
2026-08-03 11:20:30 +07:00
3dtours
7e5f406226
fix: crackling - time-based render buffer, no voice stacking, lower synth gain/verbose
2026-07-31 10:52:22 +07:00
3dtours
ad5cda5a40
fix: reduce MIDI playback crackling (no per-note prog reload, underrun-proof render loop, gentle stopAll)
2026-07-31 10:49:31 +07:00
3dtours
4d2da5a272
fix: ScriptProcessorNode fallback + worklet process() logging
...
- ScriptProcessorNode fallback khi AudioWorkletNode fails
- Render trực tiếp trong onaudioprocess callback, không cần setInterval
- Worklet log peak + queue depth mỗi 50 process() calls
- Log audioCtx state + sampleRate khi init
2026-07-27 15:09:47 +07:00
3dtours
2c012e3348
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].
2026-07-27 14:59:39 +07:00
3dtours
ef1238b87d
feat: migrate SpessaSynth → FluidSynth WASM (SF3 native, loop Gen 54 fix)
...
Replace SpessaSynth JS/AudioWorklet with FluidSynth C++ WASM
(@enikey87/fluidsynth-emscripten@0.1.1). CDN for dev, self-host
for prod. Fixes stuck Tremolo/Saxophone notes via compliant
Gen 44 loop mode processing. 100% audio parity with server
pyfluidsynth render (same C++ core).
- soundfontPlayer.js: FluidSynth WASM engine, preserve SonicSF API
- fluidsynthLoader.js: auto-select CDN (dev) vs self-host (prod)
- fluidsynth-bridge.js: PCM bridge AudioWorklet processor
- index.html: remove SpessaSynth importmap + module, add loader
- vendor/: libfluidsynth-2.3.0-sf3.js + .wasm (1.8MB self-host)
2026-07-27 12:48:30 +07:00