FIX: sửa lỗi chuyển từ tab PIANO ROLL TAB sang MAIN SESSION/SECTION-TAB không đồng bộ playhead
This commit is contained in:
@@ -2391,3 +2391,28 @@
|
||||
- **FIX (app.jsx effect 14814):** nhánh clear đổi thành `else if (prevSub && prevSub.type === 'PIANO_ROLL')` — chỉ clear khi THỰC SỰ rời khỏi piano roll tab (không play — main ngầm tiếp tục tự nhiên). prevTab = main/session (đang VÀO piano roll) → KHÔNG clear — resume point giữ nguyên.
|
||||
- **Các file ảnh hưởng:** `app/static/js/app.jsx`, `app/templates/index.html` (?v=202608070405), `wiki.md`. Rebuild precompiled.
|
||||
- **Ghi chú/Test:** hard refresh → play MAIN → double-click section → double-click MIDI item → PIANO ROLL (playhead đứng yên) → Space (piano roll play) → quay lại SECTION-TAB → **log `[Resume] main play từ X.XX s` + ÂM TIẾP TỤC từ đúng vị trí** (SF route: `dest=sfEntry node 1 ... MASTERING`); KHÔNG Space → quay lại → âm ngầm tiếp tục (không resume trùng).
|
||||
|
||||
### [2026-08-07 04:10] Task: Playhead PIANO ROLL không di chuyển khi đang play (di chuyển tab qua lại)
|
||||
- **Báo cáo user (log 0405):** piano roll play hoạt động (schedule 248 notes + noteons + `dest=sfEntry node 1 ... MASTERING` ✓) — nhưng sau khi di chuyển tab qua lại → ở PIANO ROLL TAB playhead không di chuyển khi đang play.
|
||||
- **Phân tích:** khi rời piano roll tab → effect đổi tab stop sub-tab play (isPlaying:false) + resume main/section (âm chạy). Quay LẠI piano roll tab → tab KHÔNG play → nhánh updatePlayhead sub-tab không-play KHÔNG set st.currentTime → playhead piano roll ĐỨNG YÊN — dù âm MAIN/SECTION (resume) đang phát → user thấy "đang play mà playhead không chạy".
|
||||
- **FIX (app.jsx updatePlayhead nhánh sub-tab không-play):** nếu `isPlaying` (main/section đang play — refs startOffsetTime/startAudioTime là của main) → setSubTabs `currentTime = startOffsetTimeRef + (ctx.currentTime - startAudioTimeRef)` — playhead piano roll ĐỒNG BỘ theo vị trí âm thật (chạy theo main play). Không có play nào → đứng yên (chế độ edit). Loop luôn tiếp tục rAF.
|
||||
- **Các file ảnh hưởng:** `app/static/js/app.jsx`, `app/templates/index.html` (?v=202608070410), `wiki.md`. Rebuild precompiled.
|
||||
- **Ghi chú/Test:** hard refresh → play MAIN → di chuyển tab qua lại (SECTION-TAB ↔ PIANO ROLL) → ở PIANO ROLL TAB playhead chạy theo âm đang phát (đồng bộ vị trí thật); không play gì → playhead đứng yên; bấm Space trong piano roll → playhead chạy theo tab.
|
||||
|
||||
### [2026-08-07 04:15] Task: PIANO ROLL — Space không capture play/stop + chuyển tab về MAIN/SECTION bị CÂM
|
||||
- **Báo cáo user (log 0410):** (1) trong PIANO ROLL TAB bấm Space không play/stop; (2) piano roll play → nhấn play/stop transport → chuyển sang MAIN/SECTION-TAB → CÂM (log: chuyển session → `setOutputDestination to: masterBus.input` + hết noteon — vì effect đổi tab stopAllPlayback dừng piano roll + không có gì resume).
|
||||
- **Nguyên nhân:**
|
||||
(1) Keydown handler (15938) bypass MỌI hotkey khi focus INPUT/TEXTAREA/contentEditable — piano roll tab có input focus (snap/rename...) → Space chết.
|
||||
(2) Effect đổi tab (14814) — rời sub-tab đang play → `stopAllPlayback()` (dừng piano roll — luật cũ "rời sub-tab play → stop") → về MAIN/SECTION không còn âm → CÂM.
|
||||
- **FIX (app.jsx):**
|
||||
(1) Keydown handler: activeTab là PIANO ROLL (`midi_*`) → Space LUÔN play/stop (kể cả focus input); phím khác vẫn bypass.
|
||||
(2) Effect đổi tab: rời PIANO ROLL tab đang play → KHÔNG stopAllPlayback (SF notes đã schedule — tiếp tục kêu tự nhiên — không câm); audio sub-tab (buffer source riêng) giữ stop như cũ. Resume block (mainResumeRef) giữ nguyên — tự stop + resume main nếu có.
|
||||
- **Các file ảnh hưởng:** `app/static/js/app.jsx`, `app/templates/index.html` (?v=202608070415), `wiki.md`. Rebuild precompiled.
|
||||
- **Ghi chú/Test:** hard refresh → PIANO ROLL TAB → Space play/stop hoạt động (kể cả khi input focus); piano roll play → chuyển sang MAIN/SECTION-TAB → âm piano roll TIẾP TỤC (hết notes tự nhiên — không câm); quay lại tab → playhead đồng bộ.
|
||||
|
||||
### [2026-08-07 04:20] Task: Playhead NGỪNG khi chuyển tab PIANO ROLL (play thuần) → MAIN/SECTION — không đồng bộ âm
|
||||
- **Báo cáo user:** preview piano roll (play thuần — main chưa play) → chuyển tab sang MAIN/SECTION-TAB → playhead ngừng di chuyển (dù âm piano roll còn kêu — fix 0415 không stop âm).
|
||||
- **Nguyên nhân:** rời piano roll play → setSubTabs isPlaying:false + KHÔNG stop âm (0415) — nhưng `isPlaying` (main) vẫn false → updatePlayhead nhánh MAIN `if (!isPlaying) return` → playhead đứng yên — KHÔNG đồng bộ với âm piano roll đang phát.
|
||||
- **FIX (app.jsx effect đổi tab 14814):** rời PIANO ROLL play → về MAIN/`session_*` + mainResumeRef null (play thuần) → `setIsPlaying(true)` — nhánh main updatePlayhead chạy → playhead main/section di chuyển theo elapsed (refs đang là của piano roll play — đồng bộ với âm). Hết bài → nhánh main tự stop. Resume block (mainResumeRef) giữ nguyên ưu tiên trước.
|
||||
- **Các file ảnh hưởng:** `app/static/js/app.jsx`, `app/templates/index.html` (?v=202608070420), `wiki.md`. Rebuild precompiled.
|
||||
- **Ghi chú/Test:** hard refresh → PIANO ROLL TAB → Space play (main chưa play) → chuyển MAIN/SECTION-TAB → playhead TIẾP TỤC di chuyển (log `[Playhead] tiếp tục theo piano roll`), âm piano roll vẫn kêu hết notes; quay lại piano roll → playhead đồng bộ.
|
||||
|
||||
Reference in New Issue
Block a user