From 26086cb33111d667362fb453b0be369958bd3417 Mon Sep 17 00:00:00 2001 From: locphamtran Date: Tue, 25 Aug 2026 21:33:33 +0700 Subject: [PATCH] fix(render): VSTi export lay preset dung bridge channel (midi_channel, khong phai track.id) render_session_container da tinh midi_channel round-robin melodic giong unifiedMidiRouter.allocateChannel, nhung VSTi branch truyen track.id vao bridge_state_preset_b64 -> lay preset cua channel stale (VD track5 -> ch5 trong khi realtime choi ch2) -> export sai loai nhac cu. Dung midi_channel. --- app/core/native_render.py | 7 ++++--- app/core/render_engine.py | 8 +++++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/app/core/native_render.py b/app/core/native_render.py index 77359dc..e8b3abf 100644 --- a/app/core/native_render.py +++ b/app/core/native_render.py @@ -143,9 +143,10 @@ def bridge_state_preset_b64(channel=None, plugin_path=None) -> str: plugin load init patch → âm khác realtime (user tưởng "fallback"). Fallback này nối: dùng preset mà bridge đã capture cho channel đó. - Match: channel == int(track.id) (scheduleMidiNoteDispatch pushEvent - channel: trkId) + path khớp plugin (basename, case-insensitive). Không tìm - thấy → "" (giữ hành vi cũ — không đoán bừa preset channel khác).""" + Match: channel == midi_channel (round-robin melodic — cùng quy ước + unifiedMidiRouter.allocateChannel, KHÔNG phải track.id) + path khớp plugin + (basename, case-insensitive). Không tìm thấy → "" (giữ hành vi cũ — không + đoán bừa preset channel khác).""" try: st_path = os.path.join(os.environ.get("APPDATA", ""), "SonicForgeDAW", "state", "bridge_state.json") diff --git a/app/core/render_engine.py b/app/core/render_engine.py index 20f5f85..85677d8 100644 --- a/app/core/render_engine.py +++ b/app/core/render_engine.py @@ -716,8 +716,14 @@ class PythonRenderEngine: preset_b64 = (se2.get("preset_data") or track.get("preset_data")) if not preset_b64: + # BUG v6: channel phải là midi_channel + # (round-robin melodic — giống + # unifiedMidiRouter.allocateChannel), + # KHÔNG phải track.id → trước đây lấy + # preset của channel stale (sai loại + # nhạc cụ khi realtime chơi channel khác). preset_b64 = native_render.bridge_state_preset_b64( - channel=track.get("id"), + channel=midi_channel, plugin_path=(se2.get("plugin_path") or track.get("plugin_path")), )