fix: pass channel+synth_engine to playNote in all MIDI playback paths
6 call sites were missing channel parameter, causing FluidSynth to use ch=0 for all tracks -> program_change on channel 0 overwrote instrument across tracks during playback. Fixes: startTrackPlayback, section sub-track MIDI, playMidiPreviewNote, piano roll Alt+scroll preview, note click preview, keybed preview.
This commit is contained in:
@@ -473,3 +473,9 @@
|
||||
- **Các file ảnh hưởng:** `app/static/js/app.jsx` (verify lines 4642-4667, 5905, 6763-6807, 8422-8424), `app/core/render_engine.py` (verify lines 95-115)
|
||||
- **Ghi chú/Test (nếu có):** No code changes needed. All 4 rules confirmed working.
|
||||
---
|
||||
|
||||
### [2026-07-27 20:37] Task: Fix cross-track instrument interference (missed channel param)
|
||||
- **Tóm tắt thay đổi:** Sửa 6 vị trí gọi `SonicSF.playNote()` thiếu tham số `channel` + `synthEngine`, khiến FluidSynth mặc định `ch=0` cho mọi track → `program_change` trên channel 0 đè lên nhau giữa các track. Fix: thêm channel computation (từ `track.midiChannel` hoặc track index) + truyền `synth_engine` vào `playNote` tại `startTrackPlayback`, section sub-track MIDI, `playMidiPreviewNote`, piano roll Alt+scroll preview, note click preview, keybed onMouseDown/onMouseEnter. `setTrackInstrumentWithProgram` đã filter đúng `trackId` — lỗi không nằm ở logic set instrument mà ở playback.
|
||||
- **Các file ảnh hưởng:** `app/static/js/app.jsx` (lines 4846, 5121, 5661-5671, 10117-10124, 10179-10201, 10285-10307)
|
||||
- **Ghi chú/Test (nếu có):** `npm run build` pass. Cần test: main session play 2 tracks MIDI khác instrument → mỗi track giữ instrument riêng. Piano Roll preview note → không ảnh hưởng track khác.
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user