fix crash bridge khi đổi SF→VSTi đang play: silence same-plugin theo path MỚI trước assign() (createInstance) — track restore giữ cùng DLL process song song audio loop = 2 threads 1 DLL Nexus crash; không tự mở GUI khi đang play (C++ mute channel tới khi đóng GUI → tắt âm)
This commit is contained in:
@@ -86,3 +86,10 @@ chạy từng mục trên máy Windows (hoặc OS native có đủ toolchain),
|
||||
- ⚠️ Nexus VST3 silent (license). Dùng ACDD demo để chứng minh âm.
|
||||
- ⚠️ daw_engine.exe serve index.html từ memory lúc start (v=202608121600) dù file trên đĩa đã bump v=202608121700 → restart app mới nhận build mới.
|
||||
- Ghi chú deploy: copy `app/static/js/app.precompiled.js` + `app/templates/index.html` → `dist/`, `src-tauri/resources/`, `src-tauri/target/release/` (cùng dưới `daw_engine/_internal/app/`), bump `?v=` chống cache.
|
||||
## Kết quả test THẬT Windows 2026-08-13 (build af59aaf + hotfix SF→VSTi khi play)
|
||||
- 🐛 **BUG (user báo): auto-restore project → track SF2 đang play → nút Synth đổi SF→VSTi → crash bridge, tắt âm, không play lại được.**
|
||||
- Nguyên nhân C++: LOAD job (type=2) silence same-plugin channels CHỈ SAU `assign()` — mà `assign()` chứa `createInstance` (loadPlugin) chạy trên worker. Nếu track KHÁC (từ restore) đang giữ CÙNG DLL VST3 với instrument mới → trong lúc createInstance, audio loop vẫn `process()` inst của track đó → 2 threads trong 1 DLL (Nexus) → crash thoát im lặng.
|
||||
- Fix C++ (`main.cpp` LOAD job): tính `spNew` (channels giữ path mới, lowercase so sánh) TRƯỚC `assign()`, silence chúng cùng `spOld`; restore sau assign dùng `unmute_if_not_closing`. Tách `lower_path_str()` khỏi `lower_plugin_path()`.
|
||||
- Nguyên nhân "tắt âm + không tải lại được": sau load VST3 OK, JS tự mở native GUI (`openVstGuiRetry`) dù đang play → C++ mute channel tới khi đóng GUI (reloading_=true, note-on drop) → track câm vĩnh viễn giữa lúc play.
|
||||
- Fix JS (`app.jsx` loadTrackInstrumentToBridge): chỉ tự mở GUI khi `!isPlayingRef.current`; đang play thì chỉ load instrument im lặng, GUI mở qua nút GUI riêng (`ensureAndOpenVstGui`).
|
||||
- ✅ **Windows verify**: mở project cũ (track SF2 + track VST3), play, đổi track SF2 → VSTi cùng DLL track kia → không crash, âm VSTi mới phát; đổi lại SF2 → play tiếp được. Mở GUI lúc đang play → track mute (trade-off có chủ đích, âm lại sau khi đóng GUI).
|
||||
|
||||
Reference in New Issue
Block a user