3dtours
d1995307f5
feat: Media Explorer My Computer truy cập filesystem thật
2026-07-31 13:08:54 +07:00
3dtours
fdaabe3a08
feat: Media Explorer panel (F6) với mutual exclusion Mixer (F7)
2026-07-31 11:59:20 +07:00
3dtours
548ab1258f
FIX: sửa lỗi play MIDI items bị cracking
2026-07-31 10:58:20 +07:00
3dtours
05e6a467d8
FIX: sửa lỗi drag and drop vào track thì sẽ mở midi file ở track đó
2026-07-31 10:47:33 +07:00
3dtours
175bce6743
FIX: sửa lỗi nhấn SOLO không play realtime
2026-07-31 10:39:01 +07:00
3dtours
619a2484ce
FIX: sửa lỗi vẫn diễn anim khi track đã bị mute
2026-07-31 10:34:48 +07:00
3dtours
c47eb5d718
FIX: sửa lỗi bật nút POWER FX nhưng âm thanh vẫn bị bypass
2026-07-31 10:29:36 +07:00
3dtours
01d02a9d71
FIX: cho phép click và active, sửa các MIDI item trong cùng track
2026-07-31 10:21:19 +07:00
3dtours
0ea994fb2f
FIX: active tất cả các note của các MIDI item cùng track
2026-07-31 09:48:42 +07:00
3dtours
9b25766fca
FIX: drag and drop vào khung track timeline thì tự động tạo track cho midi
2026-07-31 09:40:50 +07:00
3dtours
3c4f106e14
FIX: lỗi khi play MIDI thì cho phép active multi track khác realtime
2026-07-31 09:26:51 +07:00
3dtours
6c11daccf8
FIX: lỗi khi play MIDI thì cho phép active các track khác realtime
2026-07-31 08:47:37 +07:00
3dtours
ef6370f92e
FIX: lỗi cắt MIDI note thành nhiều notes
2026-07-31 08:23:38 +07:00
3dtours
47e87c8363
FIX: lỗi load dự án và hiển thị mixer panel
2026-07-31 07:51:18 +07:00
3dtours
59aa9a32ff
feat: allow multiple simultaneous solo tracks
...
Replace single-track solo (radio) with multi-solo toggle.
No longer clears solo on other tracks when toggling one track.
2026-07-31 07:10:32 +07:00
3dtours
468a1f11a4
fix: Lucide icon refresh on new track creation
...
Add activeTracks to useEffect deps for lucide.createIcons() so
icons render when user/AI creates tracks via any path.
2026-07-31 07:06:29 +07:00
3dtours
437980ea9f
feat(generator): post data to parent preset form
2026-07-31 06:43:01 +07:00
3dtours
bc36e40967
feat(generator): apply md/50 transfer spec
2026-07-31 06:36:37 +07:00
3dtours
6ce77c4f20
fix(generator): anchor preview bottom to modal edge
2026-07-31 06:16:36 +07:00
3dtours
bc951e75af
feat(preset-manager): category dropdown + generator modal
2026-07-31 05:50:55 +07:00
3dtours
5e8664af1c
FIX: sửa lỗi tải lại audioclip item bị mất tiếng
2026-07-30 22:33:26 +07:00
3dtours
323be6a6f4
fix: piano roll draw notes snapped to grid via getSnapBeat
...
note.start_beat + duration_beats snapped before rendering.
Applies to active, ghost, and recording notes.
2026-07-30 21:15:38 +07:00
3dtours
5ed6acd4f5
fix: piano roll snap values inverted in getSnapBeat/getSnapDuration/grid
...
snap='1' gave q=4.0 (4-beat snap). Fix all 3 mappings:
grid lines, note snap, default duration.
2026-07-30 21:08:56 +07:00
3dtours
6c227fe6af
fix: draw clip rect/label always, skip only waveform when buffer null
...
- clip rect + label + markers drawn even without buffer
- shows '(audio chưa được tải)' for unloaded clips
- deserialize restores clip duration from duration_bars
2026-07-30 21:05:33 +07:00
3dtours
7b8e10419f
fix: snap default '1' + Power button reads masterConnected directly
...
- snapValue default '1' (was 'free'), piano roll snapVal default '1' (was '1/16')
- Power button: remove shared isFxActive, use masteringSettings.masterConnected
2026-07-30 20:59:29 +07:00
3dtours
4005088e89
fix: audio clip items lost after reload — missing serverFileId on clip/track
...
- set serverFileId on clip + track when upload succeeds
- serialize/deserialize server_file_id in source_data
- guard clip.buffer null in WaveformLane canvas draw
2026-07-30 20:54:23 +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
313d1be5af
fix: loadAudioBuffersForTracks scoped in ProfileModal crashes project load
...
Move fn to App component scope, pass as prop to ProfileModal.
restoreLastSessionProject now has access on startup.
2026-07-30 20:40:25 +07:00
3dtours
3386a2b4c2
feat: add structured preset button in AI Preset Manager
...
Add handleNewStructured fn + emerald button left of Quay lại
pre-fills form with comprehensive Vietnamese template sections
2026-07-30 20:33:22 +07:00
3dtours
b67c0264fb
feat(mixer): Master + Track Strip Console per specs 47/48
2026-07-30 12:55:35 +07:00
3dtours
74597cfe8b
feat(mixer): install Master Strip Console per spec 47
2026-07-30 12:47:10 +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
a1767e338a
fix: Select Instrument stays open after picking instrument
...
Remove setInstrumentSelectorTrackId(null) from
setTrackInstrumentWithProgram. Modal stays open so user can
switch tracks and assign instruments without reopening.
2026-07-29 11:56:26 +07:00
3dtours
8051cf3edb
fix: add missing aiTypeaheadRef definition
2026-07-29 11:52:49 +07:00
3dtours
35e767795a
fix: Synth button opens modal with inline track selector
...
Remove external track dropdown. Add select dropdown inside the
instrument selector modal between title and search box. Users
can switch tracks without closing the modal.
2026-07-29 11:52:12 +07:00
3dtours
7bfdd72850
feat: Synth button shows track dropdown for quick instrument assign
...
Synth button opens a dropdown listing all tracks instead of opening
the modal directly. Selecting a track opens the instrument selector
for that track. No need to close modal and click each track's Synth.
2026-07-29 11:49:34 +07:00
3dtours
41b5a70a60
fix: AI SUGGEST auto-updates after saving preset in manager
...
Add aiPresetVersion counter. Increment on modal close. AI panel
compares version and calls loadPresets() to sync from localStorage.
2026-07-29 11:45:31 +07:00
3dtours
a3e681afc0
fix: re-fetch instrument data after login for new machines
...
Auth success handler now eagerly loads instrumentSelectorData
via listPlugins + getSoundfontCatalog. The mount-time useEffect
runs before auth token is set, so it silently fails on new machines.
2026-07-29 11:34:50 +07:00
3dtours
8775c960e3
fix: seed_admin() no longer resets admin password on restart
...
Remove hash verification + password reset logic. seed_admin() now
only creates the admin account if it does not exist. Prevents
password being reset to default + must_change_password flag
being set on every server restart.
2026-07-29 11:28:49 +07:00
3dtours
d4262acb9f
fix: rewrite drag handler with stable crossOffset + outTracks merge
2026-07-29 11:13:31 +07:00
3dtours
e40fdf15ad
fix: use original baseTrackId for crossOffset, never update drag.trackId
2026-07-29 11:10:59 +07:00
3dtours
0d763c5a0b
fix: targetTrackId undefined outside updateActiveTracks closure
...
Move track Y-position computation before updateActiveTracks so
targetTrackId is accessible for setDraggedSectionItem update.
2026-07-29 11:09:05 +07:00
3dtours
ad6fa1feb9
fix: auto-add tracks when drag exceeds track count
...
Compute maxTargetIdx across all multiIds items. Prepend new
tracks to prev array before mapping if needed.
2026-07-29 11:08:11 +07:00
3dtours
9abb0e6a50
fix: cross-track drag computes target from mouse Y position
...
Replace hoveredTrackIdRef with Y-position calculation through
track heights from prev state. Works reliably during drag.
2026-07-29 11:03:30 +07:00
3dtours
6c6a326b7d
fix: single-item cross-track drag
...
Each track filters the item independently. Only target track
receives the inserted item. Removes duplicate state update.
2026-07-29 11:02:03 +07:00
3dtours
8e8fc58082
fix: group drag uses original trackId for offset math
...
Store trackId in multiIds at drag start. Each item computes
target from original track + crossOffset, immune to stale state
from previous drag events. Track 1 item drags n tracks -> track
1+n, track 2 item -> track 2+n, etc.
2026-07-29 11:00:51 +07:00
3dtours
ec355da58d
fix: group drag cross-track uses live prev state for index mapping
...
Build trkIds from prev (updateActiveTracks callback) instead of
stale activeTracksRef. Fix srcItem lookup with proper for loop.
2026-07-29 10:55:39 +07:00
3dtours
9c3a435f26
fix: group drag cross-track maintains relative track offsets
...
Each item computes its own target track as srcIdx + crossOffset.
Items from different source tracks land on different target tracks,
preserving the group's vertical layout shape.
2026-07-29 10:52:50 +07:00
3dtours
12d2639455
fix: group drag keeps items on their original tracks
...
Remove all cross-track logic in multiIds path. Each item only
updates its time position (delta) on its current track. No
merging or track reassignment.
2026-07-29 10:50:37 +07:00
3dtours
e99bc8624f
fix: group drag moves all items, clamp to track 0, auto-add track
...
Restore multiIds cross-track move for all selected items.
Clamp targetTrackId to first track. Auto-add new track via
addNewTrack() when dragging below the last track.
2026-07-29 10:47:53 +07:00