3dtours
73025fc387
fix: instrument SF3/Sonatina không phát âm thanh - chuyển SF3->SF2, bỏ convert SF2->SF3, sửa converter
2026-08-02 21:44:49 +07:00
3dtours
4db777eb5d
feat: Media Explorer duyệt toàn bộ folder và files (tree đệ quy)
2026-08-02 14:31:42 +07:00
3dtours
1989bfb105
fix: Window Explorer liệt kê ổ đĩa thật + xử lý lỗi API
2026-08-02 14:27:03 +07:00
3dtours
d1995307f5
feat: Media Explorer My Computer truy cập filesystem thật
2026-07-31 13:08:54 +07:00
3dtours
be3205645f
fix(audio): recover clip serverFileId from audio_file_url on project load
...
3 fixes for audio clips losing sound after save/reload:
1. deserializeTracksList: clip-level serverFileId falls back
to extracting from audio_file_url when server_file_id missing
2. serializeTracksList: add server_file_id to track output
so track-level fallback survives round-trip
3. upgrade_project_json_if_needed: include server_file_id
in source_data during legacy project upgrade
2026-07-30 22:26:53 +07:00
3dtours
58a294d845
IMPROVE: cho phép lưu dự án và phục hồi dự án vừa tắt
2026-07-30 20:47:44 +07:00
3dtours
cff3950670
feat: AI Copilot suggestion chips + typeahead dropdown
...
- Suggestion chips bar: context-aware (amber for rearrange, indigo for creation)
- Typeahead dropdown: keyword matching on ≥2 chars, Tab to select
- getSelectedMidiItemInfo helper for context detection
- Backend: 4 rearrange presets in ai_presets.py
- PromptTemplateManager: getContextualSuggestions(hasSelectedItem)
2026-07-28 11:20:26 +07:00
3dtours
421535ca0e
feat: AI MIDI Prompt Template & Preset Engine
...
- promptTemplateManager.js: standalone service with keyword scoring, CRUD, fav toggle
- ai_presets.py: backend CRUD router (JSON file, auth isolation)
- AIPresetModal: PromptTemplateManager, star/fav column, backend API sync
- Piano Roll AI: preset matching support
- 7 tests: matching, CRUD, anonymous auth, user isolation
2026-07-28 10:42:30 +07:00
3dtours
d0def4bf1e
feat: auto-scan soundfont for Synth instrument list
...
Background daemon (30s interval) tracks scanned files via
sf_scan_state.json (size+mtime). Only inspects new/changed SFs.
Catalog served from scanner cache, no full re-scan per request.
Upload/delete trigger immediate re-scan.
2026-07-28 07:06:37 +07:00
3dtours
2ad29226c4
fix: deduplicate soundfont scan + source label + delete only uploads
...
- _scan_soundfonts: dict-keyed by base_id to prevent duplicates
- Add 'source' field ('system' | 'upload') to each soundfont entry
- Delete endpoint: only allow deleting upload soundfonts (403 for system)
- Frontend: show (system)/(upload) tag, hide Delete for system fonts
2026-07-27 09:36:58 +07:00
3dtours
de70d4a837
clean: stable oscillator-only client preview, remove debug logs
...
SpessaSynth's SoundBankLoader.fromArrayBuffer extracts 0 presets
from SF2 files (parser limitation). Client preview always uses
oscillator (reliable, approximate GM ADSR per program).
Server-side FluidSynth render provides authentic SoundFont audio.
2026-07-26 20:16:52 +07:00
3dtours
5eb0c26ce4
debug: add detailed tracing logs for entire SF download→SpessaSynth flow
2026-07-26 20:05:34 +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
e843f55483
fix: strip null synth_engine from project JSON
...
- Frontend serialize: use undefined instead of null for synth_engine
- Backend validate: strip None synth_engine from tracks before schema validation
- Prevents 'None is not of type object' schema error
2026-07-26 18:22:35 +07:00
3dtours
7af0e61fb0
fix: add project_id fallback for schema validation
...
- validate_project_data injects missing project_id with temp_legacy_ prefix
- Prevents 400 error when old frontend data lacks project_id
2026-07-26 18:13: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
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
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
0155abd0da
feat: bổ sung phần profile của user
2026-07-22 18:55:25 +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
6f0fac9f2d
fix: sửa lỗi Ai prompt multi
2026-07-22 18:37:52 +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
108943ae81
fix: thêm và sửa các tools của AI
2026-07-22 09:51:27 +07:00
3dtours
e0b849fdf2
fix: đã sửa lỗi AI gửi prompt
2026-07-22 08:52:34 +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
3dtours
a34b01a035
First commit
2026-07-18 15:09:05 +07:00