Commit Graph

448 Commits

Author SHA1 Message Date
3dtours 1790f743d6 fix: add 400ms decay to MIDI noteoff for natural release 2026-07-31 08:26:06 +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 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 437980ea9f feat(generator): post data to parent preset form 2026-07-31 06:43:01 +07:00
3dtours bc951e75af feat(preset-manager): category dropdown + generator modal 2026-07-31 05:50:55 +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 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 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
3dtours 74597cfe8b feat(mixer): install Master Strip Console per spec 47 2026-07-30 12:47:10 +07:00
3dtours 0c1a27ef2c FIX: sửa PIANO ROLL TAB khi vẽ draw note midi phải play các note được vẽ 2026-07-30 11:38:36 +07:00
3dtours eb61015cff FIX: sửa MASTERING PANEL thay đổi knob thì thay đổi các thông số hiển thị 2026-07-30 11:18:35 +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 e64070a83e FEAT: cài đặt tính năng cho volume main out 2026-07-30 09:34:36 +07:00
3dtours 66eef405a7 FIX: tăng velocity thêm tính năng midi key khác sử dụng cho midi note 2026-07-29 22:34:05 +07:00