3dtours
09231d9b21
fix: explicit selectInstrument for SpessaSynth bank+program routing
...
Per md/37_FIXVST3_SUGGEST.md:
- Add SonicSF.selectInstrument(channel, bank, program, sfId) method
- Always sends controllerChange(CC0, bank) + programChange(prog) to SpessaSynth
- _playNoteSpessa also sends CC32 (bank LSB) before programChange
- Remove default bank auto-load from init (cleaner startup)
- Fix syntax error (double }} from previous edit)
- playNote Spessa: use program arg + synthEngine bank/program properly
2026-07-26 19:37:29 +07:00
3dtours
6d9060a52b
fix: gracefully fallback to oscillator when SpessaSynth bank load fails
...
- SpessaSynth init tries to load default bank, gracefully handles failure
- When bank load fails, _currentSfId stays null → _playNoteOsc fallback
- Client preview: oscillator emulation (approximate GM sound)
- Server-side render via FluidSynth: authentic SoundFont audio
2026-07-26 19:32:32 +07:00
3dtours
263c4be409
fix: use importmap to resolve spessasynth_core bare import
...
- Add importmap in index.html to map spessasynth_core to CDN URL
- Load spessasynth_lib from CDN directly (with importmap resolving deps)
- WorkerSynthesizer fallback also uses CDN import
- Ensures library and processor use same spessasynth_core version
2026-07-26 18:55:08 +07:00
3dtours
50847fc440
fix: WorkerSynthesizer fallback, remove non-existent BasicSynthesizer
2026-07-26 18:53:12 +07:00
3dtours
4d42b8407c
fix: serve SpessaSynth processor locally to avoid CDN version mismatch
...
- Download spessasynth_processor.min.js from CDN, serve as static file
- Change __SpessaSynthCDN to /static/js/services/
- Fix version mismatch between esm.sh library and CDN processor
2026-07-26 18:47:32 +07:00
3dtours
c884f3c533
fix: clone buffer before addSoundBank, re-await isReady, force program 0
...
- Clone ArrayBuffer before sendToWorklet (transfer neuters original)
- Re-await synthInstance.isReady after addSoundBank
- Force controllerChange(0,0,0) + programChange(0,0) after load
2026-07-26 18:44:43 +07:00
3dtours
5096c618b4
fix: SF3 download prefers SF2, cache invalidation on parse error
...
- Download endpoint reverses extension priority: .sf2 > .sf3
- loadSoundFont adds ?t= cache-buster, invalidates IndexedDB on error
- Retry logic: delete corrupted cache entry, allow re-download
2026-07-26 18:37:46 +07:00
3dtours
e7a0a85eca
fix: SpessaSynth init race condition, remove auto-load of sgm_v2.01
...
- Add _initInProgress flag to prevent concurrent init calls
- Remove auto-loadSoundFont from init (confuses user when loading DSK)
- SF3 loading happens only when user selects an instrument
2026-07-26 18:33:04 +07:00
3dtours
09def59cac
fix: use esm.sh CDN to resolve spessasynth_core bare import
...
- jdelivr raw index.js has bare import 'spessasynth_core' which browser can't resolve
- esm.sh automatically rewrites bare imports to full URLs
- Keep jdelivr for worklet processor (self-contained, no imports)
- WorkerSynthesizer fallback also uses esm.sh
2026-07-26 18:09:12 +07:00
3dtours
0271be4484
fix: SpessaSynth CDN URL + AudioWorklet init flow
...
- Fix CDN URL: spessasynth_lib@4.3.1/dist/index.js (was @latest with wrong path)
- Use WorkletSynthesizer instead of Synthesizer (correct class name)
- Add audioWorklet.addModule() for processor CDN URL
- Await synth.isReady before use
- Use soundBankManager.addSoundBank() (correct API)
- Fallback to WorkerSynthesizer if AudioWorklet fails
2026-07-26 18:05:44 +07:00
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
1a28ebabee
fix: piano roll và main session play
2026-07-23 21:05:26 +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
055f351a17
fix: sửa lỗi cho AI thực hiện tạo MIDI
2026-07-23 18:19:12 +07:00
3dtours
225f23516f
feat: thêm soundfont và VSTi cho MIDI
2026-07-23 17:47:46 +07:00
3dtours
0e44e44ecb
feat: bổ sung MIDI
2026-07-23 08:32:23 +07:00
3dtours
9bf9f38864
feat: thêm tính năng lưu dự án bằng modal, Lưu dưới tên khác (Save As) và quản trị dự án/tệp tin trong Hồ sơ cá nhân
2026-07-22 18:42:14 +07:00
3dtours
b9c524230d
fix: tự động dịch chuyển thanh cuộn xuống dưới cùng
2026-07-22 17:49:08 +07:00
3dtours
610c384bca
fix: copilot Multi-tool Calling)
2026-07-22 17:20:41 +07:00
3dtours
d6fe1326c5
fix: sửa copilot không gửi AI provider 2
2026-07-22 17:01:41 +07:00
3dtours
8a85dd2dfc
fix: sửa copilot không gửi AI provider
2026-07-22 15:02:43 +07:00
3dtours
b78193dfad
fix: sửa UI của bars và lưu thông tin vào profile
2026-07-22 10:54:24 +07:00
3dtours
6fd9db54cf
fix: sửa các tools của AI
2026-07-22 09:59:43 +07:00
3dtours
108943ae81
fix: thêm và sửa các tools của AI
2026-07-22 09:51:27 +07:00
3dtours
4791bb22d9
fix: đã sửa lỗi các tools của AI
2026-07-22 09:27:12 +07:00
3dtours
022fbb3351
fix: đã sửa lỗi AI gửi prompt và thêm các tool để AI thực hiện
2026-07-22 09:23:05 +07:00
3dtours
e0b849fdf2
fix: đã sửa lỗi AI gửi prompt
2026-07-22 08:52:34 +07:00
3dtours
04403b0af7
fix tạm lỗi cài đặt AI prompt
2026-07-21 21:38:37 +07:00
3dtours
bbc42c630e
feat: cài đặt tính năng AI cho để prompt
2026-07-21 19:48:35 +07:00
3dtours
d5143b440a
fix: change md files to md folder
2026-07-21 18:22:39 +07:00
3dtours
85a8dc6d17
fix: time selection click and shiftclick
2026-07-20 19:44:23 +07:00
3dtours
2a44b81cf5
fix: cannot login with default password
2026-07-20 11:50:07 +07:00
3dtours
c8ebdb50b0
fix: refactor
2026-07-20 10:39:07 +07:00