3dtours
23601007bf
fix: SpessaSynth init retry + default SF3 auto-load
...
- getAudioContext() calls SonicSF.init on every call (not just first)
- soundfontPlayer.init retries after 1s if SpessaSynth module not loaded yet
- Auto-loads sgm_v2.01 SF3 on successful init
- Fixes race condition: module script loads after regular scripts
2026-07-26 17:59:15 +07:00
3dtours
e51b7fd355
feat: SF3 conversion + SpessaSynth client player
...
Server:
- soundfont_converter.py: Python SF2->SF3 via ffmpeg Ogg compression
- batch_convert_all runs on startup (daemon thread)
- GET /soundfonts/download/{sf_id} serves SF3 with SF2 fallback
- Dockerfile: add fluidsynth, vorbis-tools
Client:
- soundfontStorage.js: IndexedDB cache for SF3 buffers
- soundfontPlayer.js: dual-mode (SpessaSynth + oscillator fallback)
- app.jsx: init SpessaSynth, loadSF on instrument select
- index.html: SpessaSynth CDN import + storage script tag
Compression: DSK 11M->1.1M (90%), SGM 529M->18M (97%)
2026-07-26 17:51:37 +07:00
3dtours
d48262d468
feat(engine): fix SF2 path resolution, add synth_engine struct and fallback chain
...
- Fix SF2 path: search upload dir, system dir, static dir (backward compat)
- Add synth_engine struct parsing with flat field fallback
- Add 3-level fallback: selected SF -> default SF -> oscillator synth
- Write synth_engine in setTrackInstrument UI setters
- Pass synth_engine context to client SoundFontPlayer and AI gateway
2026-07-26 16:49:40 +07:00
3dtours
89c7237379
feat: add SoundFont inspection engine + AI instrument schema
...
- SoundFontInspector (sf2utils) scans .sf2, generates full/condensed catalog
- GET /api/v1/plugins/soundfonts/catalog with lazy init + cache invalidation
- AI tool generate_multitrack_midi now requires soundfont_id/bank/program
- Condensed catalog auto-injected into AI system prompt with bank rules
- Server render: FluidSynth program_select uses bank/program + channel routing (drums→ch9)
- VST3 pedalboard path inserts CC0 bank select + program change before notes
- DecentSamplerManager loads .dspreset with CWD fix for relative sample paths
- Pianobook render branch in render_engine.py
- Client SonicSF: controllerChange, programChange, applyAITrackInstrument
- Post-AI track creation applies instrument via applyAITrackInstrument
- Background cache rescan on .sf2 upload, frontend re-fetches catalog
- libcurl4 + VST3 dirs in Dockerfile
2026-07-26 12:36:48 +07:00
3dtours
b0d7f35a1e
fix(piano-roll): loop only on btn + instant stop
...
- Sub-tab selection loop only active when st.isLooping is true
- End-of-playback loop uses st.isLooping, not global isLoopingSelection
- SonicSF.stopAll() sets gain 0 and stops oscillators immediately
2026-07-26 12:16:01 +07:00
3dtours
4e880850f5
fix(piano-roll): playhead seek + sound cracking
...
- Piano roll ruler click during playback now seeks and continues playing
- ADSR envelope uses linearRampToValueAtTime for crack-free release
- stopAll ramps gain to 0 in 20ms before stopping oscillators
2026-07-26 12:03:29 +07:00
3dtours
1ffdec68c6
fix: ruler click 200ms timeout + default instrument attackTime 0.03 + safe ramp
2026-07-26 11:51:50 +07:00
3dtours
e18b261943
fix: ruler range drag/move, default cursor, SonicSF smooth stopAll
2026-07-26 11:42:06 +07:00
3dtours
6a17e7036c
fix: nhãn của soundfont hiển thị sai và không load được instrument
2026-07-23 22:32:19 +07:00
3dtours
dac661e6c6
fix: piano roll tab có thể play với soundfont
2026-07-23 20:34:52 +07:00
3dtours
a21266736c
fix: synth để gắn soundfont cho midi
2026-07-23 19:26:26 +07:00
3dtours
225f23516f
feat: thêm soundfont và VSTi cho MIDI
2026-07-23 17:47:46 +07:00