3dtours
ef6370f92e
FIX: lỗi cắt MIDI note thành nhiều notes
2026-07-31 08:23:38 +07:00
3dtours
3cac617aff
fix: drag-move delta relative to clicked note, not first selected
2026-07-31 08:20:15 +07:00
3dtours
e1550c8ffe
fix: insert noteB after noteA in split, not at end of array
2026-07-31 08:15:56 +07:00
3dtours
c60803ee2a
fix: bump precompiled cache version for piano roll split fix
2026-07-31 08:10:06 +07:00
3dtours
9c5507f7b2
feat: MIDI note duration inheritance & Ctrl+Shift+click split
2026-07-31 08:01:52 +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
652fb98d2c
fix: resolve 3 bugs - panText undefined, cloud project load, auto-restore error handling
2026-07-31 07:46:47 +07:00
3dtours
845d1594bb
FIX: cho phép nhiều track cùng solo
2026-07-31 07:14:28 +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
bd296c63f1
FIX: lỗi hiển thị icon của các nút ở track TCP
2026-07-31 07:09:54 +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
0fdb8318f0
FEAT: thêm nút Tạo preset với cấu trúc và lưu lại vào preset manager
2026-07-31 06:50:44 +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
b1aec24392
fix(audio): robust async buffer loading with state merging + API fallback
...
- Rewrite loadAudioBuffersForTracks to use functional setTracks
preventing loss of intermediate state updates
- Add API download endpoint as fallback when static fetch fails
- Also update sessionTabs tracks with loaded buffers
- return decodeAudioFile result (audioBuffer+channelInfo) instead
of just audioBuffer
2026-07-30 22:30:56 +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
0894f97386
FIX: sửa lỗi vẽ grid sai trong PIANO ROLL GRID với snap
2026-07-30 22:14:56 +07:00
3dtours
ca34a496eb
fix: force piano roll grid redraw on snap change via renderTick
...
snapVal already in useLayoutEffect deps. Added renderTick
counter bumped in onChange to guarantee canvas redraw.
2026-07-30 21:32:45 +07:00
3dtours
e76a6df86b
chore: bump precompiled cache version
2026-07-30 21:29:22 +07:00
3dtours
64b9fbadd5
fix: WaveformLane grid now respects snapValue (was always beat grid)
...
snapDivisor was computed but never used in loop. Grid always drew
at every beat. Now grid iterates at snapInterval = beatDuration * snapDivisor.
2026-07-30 21:25:39 +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
872ecabf85
IMPROVE: cho phép lưu dự án và phục hồi dự án vừa tắt, tạo crontab để tự động sao lưu sau mỗi 5 phút
2026-07-30 20:58:54 +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
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
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
64f43cd5ad
IMPROVE: cho phép thay đổi instrument realtime khi đang playback
2026-07-30 17:32:57 +07:00
3dtours
2fb70e2e11
IMPROVE: drag và drop file midi vào dự án
2026-07-30 17:32:16 +07:00
3dtours
546ad3dd23
FIX: sửa lỗi vị trí con trỏ pos khi parse MIDI MThd header
2026-07-30 17:28:23 +07:00
3dtours
402cac56a3
FIX: sửa lỗi parse file midi có track hoặc chunk phụ trợ
2026-07-30 17:21:42 +07:00
3dtours
1de69b8f4e
IMPROVE: bật tắt ARM, MIC trên track strip, double click lên nút balance, volume
2026-07-30 17:04:13 +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
938c8d7f87
FIX: sửa lỗi fluidsynth error khi toggle percussion kit
2026-07-30 16:25:09 +07:00
3dtours
15193b13a7
FIX: sửa lỗi undo khi move items, lỗi undo khi duplication item
2026-07-30 16:19:47 +07:00
3dtours
4db3e3484a
FIX: sửa lỗi cnnot move items
2026-07-30 16:11:31 +07:00
3dtours
f0479dc3d8
FIX: sửa lỗi Uncaught ReferenceError: stopPreviewNote is not defined
2026-07-30 15:56:09 +07:00
3dtours
7836cfcc76
FIX: chỉnh sửa hoàn thành UX/UI master strip
2026-07-30 15:38:25 +07:00
3dtours
19f02a5a49
FIX: chỉnh sửa UX volume của master strip
2026-07-30 15:22:47 +07:00
3dtours
dc7ec3af4c
FIX: chỉnh sửa UI volume của master strip
2026-07-30 15:19:41 +07:00
3dtours
c073ca7a49
FIX: chỉnh sửa UI của master strip
2026-07-30 15:04:03 +07:00
3dtours
9f6f9763c1
FIX: chỉnh sửa UI của mixer panel
2026-07-30 15:01:52 +07:00
3dtours
bbd06f23d5
FEAT: thay đổi UI của mixer panel
2026-07-30 14:52:57 +07:00
3dtours
b67c0264fb
feat(mixer): Master + Track Strip Console per specs 47/48
2026-07-30 12:55:35 +07:00