3dtours
4f34491f3e
FIX: sửa lỗi hiển thị animation của VU meter khi play MIDI
2026-08-07 15:57:49 +07:00
3dtours
454dd91f96
FIX: Đã fix cross-machine (v202608060700)
2026-08-05 22:02:43 +07:00
3dtours
b3ced7a7b3
FIX: Clone AI Var kế thừa midiChannel của track gốc → 2 track DÙNG CHUNG channel
2026-08-05 15:49:44 +07:00
3dtours
4233c1eeda
FIX: Piano roll track 4 phát âm thanh instrument track 3
2026-08-05 15:17:13 +07:00
3dtours
d37f4e7557
FIX: Piano roll tab không xuất âm thanh qua mastering chain được recovery
2026-08-05 12:30:42 +07:00
3dtours
55d3464b1e
FIX: Piano roll tab không xuất âm thanh qua mastering chain
2026-08-05 12:10:50 +07:00
3dtours
856a8183b6
FIX: lỗi mở MIDI item ở trong PIANO ROLL TAB là bị lỗi âm thanh của main session
2026-08-04 22:07:48 +07:00
3dtours
0272912cff
FIX: khi click vào track number thì bị mất âm thanh, cho phép lưu màu của track
2026-08-04 16:43:44 +07:00
3dtours
c047934fc4
IMPROVE: cài đặt thêm tool để có thể phối lại cho đoạn midi item hoặc viết thêm cho nó
2026-08-04 15:23:11 +07:00
3dtours
e5b4321a55
FEAT: thêm FX RACK PANEL cho track, áp dụng cho midi item và audioclip item
2026-08-03 20:25:27 +07:00
3dtours
a9da813cb1
FEAT: thêm nút bypass cho track strip để bypass không qua mastering panel
2026-08-03 15:47:10 +07:00
3dtours
6018263044
fix: Lỗi không có âm thanh - quay lại ScriptProcessor vĩnh viễn (worklet push-model bị nghẽn main thread -> câm)
2026-08-03 12:13:26 +07:00
3dtours
36edc9daca
fix: bật AudioWorklet hết deprecation ScriptProcessor + signature guard applyMasteringSettings hết BiquadFilterNode state is bad
2026-08-03 12:11:11 +07:00
3dtours
71278f2aba
fix: mất soundfont khi ARM - clamp tham số master chain chặn NaN làm biquad state bad, toggleMasteringOnMaster idempotent, loadSoundFont retry khi lỗi thoáng qua
2026-08-03 11:44:13 +07:00
3dtours
71c3bafdb5
fix: không có âm thanh khi play MIDI item - quay lại ScriptProcessor làm renderer mặc định (worklet gây lỗi thiết bị), giữ worklet mono-safe + cache-busting
2026-08-03 11:24:59 +07:00
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
47b1633bd3
fix: ReferenceError assignTrackMidiChannel - chuyển allocator channel lên module-level cho PianoRollTabEditor + bật AudioWorklet thay ScriptProcessor
2026-08-03 11:17:19 +07:00
3dtours
9b6de7f857
fix: sfload reset_presets=0 giữ nguyên instrument các track khác; preloadTrackInstruments module-level (sửa ReferenceError reload); truyền props cho ProfileModal; lọc warning No preset found channel 9
2026-08-03 11:00:08 +07:00
3dtours
25471e6ea5
fix: lag khi ARM sau reload + câm sau vài lần nhấn MIDI - dedup loadSoundFont (1 font=1 sfload, tránh cạn heap 256MB) + preload instrument khi mở/khôi phục dự án
2026-08-03 10:43:26 +07:00
3dtours
0dc95386f2
fix: ARM nhiều track phát sai instrument - synth_engine của track là nguồn quyết định thay vì channel state (bỏ che mask khi channel giữ instrument cũ/trùng)
2026-08-03 10:33:40 +07:00
3dtours
d8227904b6
fix: MIDI ARM không phát âm thanh sau khi load instrument - lazy-load soundfont trong playNote + giữ channel khi selectInstrument truyền channel tường minh
2026-08-03 10:23:32 +07:00
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
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
223254eb07
feat: per-MIDI-item focus brightness in piano roll
2026-07-31 09:59:14 +07:00
3dtours
eb370319cb
feat: piano roll shows all same-track MIDI items notes as active
2026-07-31 09:46:55 +07:00
3dtours
1790f743d6
fix: add 400ms decay to MIDI noteoff for natural release
2026-07-31 08:26:06 +07:00
3dtours
9c487614f1
feat: auto-save 5min + backup 30min + backup management UI
...
- project_backups table + DB migration
- Backup CRUD API endpoints with auto cleanup (5-20 retention)
- setInterval 5min save + 30min backup in browser
- ProfileModal: backup list, delete, retention slider, cleanup button
2026-07-30 20:48:45 +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
64f43cd5ad
IMPROVE: cho phép thay đổi instrument realtime khi đang playback
2026-07-30 17:32:57 +07:00
3dtours
a9be38b76f
IMPROVE: hướng dẫn AI tạo nhạc đầy đủ số bars và tracks theo yêu cầu
2026-07-30 16:39:28 +07:00
3dtours
6e1f116658
FIX: sửa MASTERING PANEL có tác dụng với mainout
2026-07-30 11:06:31 +07:00
3dtours
2c55db372a
FIX: sửa volume main out
2026-07-30 10:05:11 +07:00
3dtours
d4ad3bc1f7
feat: add comprehensive Ctrl-Z/Ctrl-Y undo/redo engine for MAIN SESSION and SECTION-TAB
2026-07-29 16:05:43 +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
3f7abe0c95
feat: AI Rearrange Scenario Detection from spec 45_SCENARIAO_AI
...
- 9 rearrange scenarios with keyword matching (arpeggio, harmonies,
syncopation, walking bass, jazz, synthwave, cinematic, simplify, chromatic)
- detectRearrangeScenario() maps user prompt to specific technique rules
- buildRearrangeMessage auto-injects scenario-specific technique guidance
- 9 rearrange presets added to PromptTemplateManager (Rearrange / Variation)
2026-07-28 11:03:26 +07:00
3dtours
2eb327056d
fix: MIDI Rearrange — selected item triggers dedicated tool flow
...
- midiExtractor.js: extractSelectedMIDIContext with note name conversion
- aiGateway.js: REARRANGE_TOOL_SPEC + buildRearrangeMessage
- dawCommandDispatcher.js: register REARRANGE_MIDI_MELODY command
- app.jsx: handleAISend detects selected MIDI item → rearrange flow
- rearrangeMidiMelody handler places A/B track below source track
2026-07-28 10:54:35 +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
32b61553f9
fix: program_change at call time overrides subsequent notes
...
_playNoteFluid called program_change synchronously at
call time, not at scheduled note time. startTrackPlayback
processes all MIDI items first, then all sections -> each
note's program_change overwritten by the last type processed.
All notes played with section instrument regardless of
actual time position. Moved program_change into doNote
(setTimeout callback) so it fires at correct time.
2026-07-28 09:48:54 +07:00
3dtours
6fa6578dd1
feat: silent fallback when no instrument — no oscillator default
...
_playNoteFluid no-instrument branch previously called
_playNoteFallback (sine wave oscillator). Changed to
silent return. User explicitly requested no default sound.
2026-07-28 09:28:21 +07:00
3dtours
6dec171af7
fix: _playNoteFluid else branch leaked other track's SF program 0
...
When a track has no instrument configured, _playNoteFluid called
program_change(ch, 0). FluidSynth searches ALL loaded SoundFonts
to resolve program 0 — if only another track's SoundFont is loaded,
that SF's program 0 gets applied to the wrong track.
Fix: use oscillator fallback directly instead of program_change.
2026-07-27 21:26:52 +07:00
3dtours
b42190e6bc
feat: implement md/41_INSTRUMENT.md spec
...
- PianoRollTabService: getParentTrackByItemId, buildActiveScope,
getTrackMidiChannel helpers
- parent_track_id on all MIDI items for reverse track lookup
- handleSwitchMidiItem uses active_scope pattern
- Toolbar shows parent track context labels
- Channel assignment simplified to trackIndex % 16
- All playNote calls use unified getTrackMidiChannel
2026-07-27 20:48:14 +07:00
3dtours
b5344e41f7
fix: default instrument for tracks without instrument set
...
_playNoteFluid: when no synthEngine and no program, fallback to
program 0 on channel (default piano) so unconfigured tracks still
produce sound via FluidSynth
2026-07-27 20:09:49 +07:00
3dtours
4a9cbcdef1
fix: per-track instrument + ghost note visibility
...
soundfontPlayer.js:
- selectInstrument: respect passed channel (don't allocate new one)
- _playNoteFluid: only use _engineChMap when channel is undefined
ghostNoteExtractor.js:
- Include ALL notes from overlapping items (not clipped)
- relative_start_beat can be negative (notes before window)
- Keep original duration instead of clamping
2026-07-27 20:04:56 +07:00
3dtours
1628a34ea0
fix: ghost overlap use inclusive boundary for adjacent items
...
Changed itemEndBeat <= windowStartBeat → < and
noteAbsEnd <= windowStartBeat → < so abutting items
(Item 1 ends at bar 1, Item 2 starts at bar 1) show
ghost notes from the adjacent item.
2026-07-27 19:31:36 +07:00
3dtours
035d75e504
feat(piano-roll): ghost notes + dropdown item switcher + session sync
...
- MIDI ghost notes: all non-selected items rendered at 25% opacity
- Dropdown at tab title: switch active edit target across all tracks
- Session Sync mode (default): viewport aligned to session bars
- Isolated mode toggle: bar 0, no ghost notes
- Ghost toggle: show/hide ghost layer (only in session mode)
- Auto-scroll to session position in session sync mode
- Bar labels show absolute session bar numbers
2026-07-27 17:08:59 +07:00
3dtours
2b04b32ea8
fix: dùng fluid_synth_program_select thay vì bank_select+program_change
...
Khi load SF2, preset lookup của program_change dùng search order
(lần lượt qua các SF đã load). Track 1 load SF2→SF2 presets override
SF1 trên tất cả channel, track 2 chọn nhầm preset của SF2.
Fix: program_select(synth, ch, sfHandle, bank, prog) chỉ định rõ
SoundFont ID, không phụ thuộc search order.
2026-07-27 16:08:54 +07:00
3dtours
8965643450
cleanup: bỏ dead code stopNote + debug log _playNoteFluid
2026-07-27 16:00:33 +07:00
3dtours
16e33b2e6a
fix: _activeNotes lưu array channel cho mỗi key
...
Cùng MIDI pitch 60, track 1→ch0, track 2→ch1 cùng key '0:60'
→ single value bị overwrite, stopNote chỉ stop 1 channel.
Fix: _activeNotes[key] = [ch1, ch2, ...], stopNote iterate all.
2026-07-27 16:00:11 +07:00
3dtours
838e173dd7
debug: log _playNoteFluid params + stopNote activeNotes keys
2026-07-27 15:56:28 +07:00