1213 Commits

Author SHA1 Message Date
admin 19c1e032ee M26: diag m26d envelope PWR ON (pdc/gains/peak mix+nguon) quanh wake/cold 2026-09-07 20:55:52 +07:00
admin 3601748881 M26: fix pdc=wet-lag FILL (10240) + sync display/anchor - het upbeat khi PWR ON giua play
- FX_RT_ROUNDTRIP_SAMPLES (12032) -> FX_RT_WET_LAG_SAMPLES (10240 = FILL 40 block)
- fxRtApplyPdc + OFF-rebase + wake-rebase + bridge pos + playhead (main/sub/PR):
  tru latencyTotal (VST report 17536~365ms, content-latency that ~0) -> wet-lag
- xoa diag M26b wake + M26 OFF (ph_on_*/ph_echo), giu ph_* logs guarded
2026-09-07 18:19:39 +07:00
admin 3bc1b99376 M26: diag PWR ON wake snap (ph_on_a/s/1-3 + ph_on_wl) do wet-lag that 2026-09-07 17:20:19 +07:00
admin 95fc073e57 M26: diag PWR OFF replay — dbg_state worklet + snap pdc/gains quanh OFF (ph_echo0-3/wl) 2026-09-07 16:20:50 +07:00
admin 7140ed6e6f M25: fix master FX - worker cross-origin (Tauri origin tauri://) -> Blob URL + bump stamp precompiled 2026-09-07 15:40:52 +07:00
admin 9307ecccec M25: WS FX realtime sang Web Worker + MessageChannel worker->worklet (het underrun u1/u10 cold-start + stall main) 2026-09-07 15:11:23 +07:00
admin a88fc5b3f1 M24: fix lag am khi switch GUI VST luc play — blocking FX-GUI ops (capture poll/wait_chain_ready) ra khoi event loop qua asyncio.to_thread + lock per-session, pump audio khong stall (pump_gap 60-200ms -> 0) 2026-09-07 12:13:20 +07:00
admin 821019324f M23: fix Bug B master fader main-out moi luc + Bug C content lien tuc qua PWR toggle (giu PDC warm + rebase content wake) 2026-09-07 11:25:45 +07:00
admin dc962c87cd M22: fix Bug C playhead nhay khi PWR toggle — rebase timeline (off/at + anchor=ps) khi wake warm-session giua play; diag Bug B — mdiag dB khi F7 toggle Mixer Panel 2026-09-07 10:38:45 +07:00
admin 0ffb6caa82 M21: diag Bug C — ph-diag log playhead quanh PWR master FX toggle (arm 6s: snapshot refs/fxRt tai click/effect/freeze/snap/anchor + ph_jump khi delta>0.25s) 2026-09-07 10:04:59 +07:00
admin fa6d09ee83 M20: diag Bug B — log meter dB master OUT (load/fx_click/panel_open + hist 8s + post 1/2/4/8s) 2026-09-07 09:03:23 +07:00
admin e4c678aabd M19: fix fx PWR OFF->ON crackle/wobble — wake clear_queue play + cho started (het phat audio cu + underrun) 2026-09-07 08:54:47 +07:00
admin 7b27065ed8 M18: fx realtime bridge — FILL 24->40 CAP 48->64, PDC 7936->12032
Chẩn đoán: M17 (MMCSS+priority) hoạt động đúng; glitch còn lại do deficit
engine ~3.3% (session Ozone loopAvg 22.06ms > 21.33ms) + stall input
68-186ms > cushion hiệu dụng ~90ms (FILL 24) -> underrun định kỳ; sau
underrun resume 8-block (~43ms) cushion mỏng. Nâng FILL 40 -> cushion
~170ms che stall <170ms; CAP 48->64 tránh cap-drop sau resume; PDC
FX_RT_ROUNDTRIP_SAMPLES (7+40)*256=12032 giữ align dry path.
2026-09-06 20:50:19 +07:00
admin f56d7eb9cf M17: realtime FX mượt — MMCSS Pro Audio + HIGH_PRIORITY_CLASS (JuceFxLoop), GUI tick cadence động 30/200ms (guiBusy), worklet CAP 32->48, track FX gửi input NGAY như master 2026-09-06 20:11:26 +07:00
admin ef521d9981 M7-M16: VST FX GUI native embed hoàn thiện — fix click-2-lần chuyển slot, anchor lần mở đầu, taskbar icon
- app.jsx: masterGuiOpenRef sync truoc setState — guard chuyen slot doc ref, het race closure (click 1 lan chuyen slot)
- JuceFxGuiHost.cpp: M14 applyAnchor truoc setVisible (het flash giua man hinh); M15 clear WS_EX_APPWINDOW + set TOOLWINDOW (het taskbar icon — JUCE set APPWINDOW 0x40000 thang TOOLWINDOW); M9 owner DAW + M9d skip applyOwner khi an
- JuceFxLoop.cpp: M16 bo clearAnchor khi ed.open (retry ed.open ~700ms xoa rect fresh -> window moi khong anchor duoc lan dau mo panel); chi clear khi Close
- JuceFxEngine/app.jsx/plugins.py/fx_realtime.py: editor session realtime, anchor rect routing, retry ed.open
- Rebuild engine PyInstaller + juce_fx_bridge cmake; binaries dong bo 5 noi (bridge 7464a7ef)
2026-09-06 19:45:14 +07:00
3dtours ec2c925d09 M6: fix 2-GUI khi mở VST FX native (mastering) — một plugin chỉ một GUI
Bug .24: mastering panel load VST FX → 1 floating native (FX slot N) + 1 embed
cùng lúc; floating không đóng được qua UI.

Backend (/fx-gui):
- native branch terminate bridge fx-gui fallback cũ cùng plugin_path trước
  ed.open (loại instance VST thứ 2 + window rời)
- fallback spawn chặn khi editor native đang mở ở session sống → trả native
  (không spawn embed/float thứ 2)
- _terminate_fx_gui_for_path dùng chung cho /fx-gui/close

Frontend (M6 — xử lý r.native):
- openMasterVstGui/openVstGui/auto-open/reopen: nhánh native → state
  {path, url:null, native:true} (không còn toast 'Không mở được GUI embed'),
  marker gui_open_path/vstGuiOpenPath giữ như embed
- closeMasterGui/closeFxGui native → SonicAPI.closeFxGui (engine capture preset
  + ed.close); unmount/hide panel → SonicAPI.hideFxGui
- panel render: GUI native mở = indicator + nút Đóng GUI (thay VstGuiEmbed)
- api.js: closeFxGui/hideFxGui/showFxGui endpoints
2026-09-04 18:26:40 +07:00
admin cede51ae0c M5.4: VST3 host conformance (Reaper-style) for FX GUI attach
- queryInterface now answers FUnknown::iid + own iid (IComponentHandler /
  IPlugFrame) with addRef+this per SDK QUERY_INTERFACE contract; plugins that
  QI the host handler no longer get kNoInterface unconditionally.
- setBusArrangements negotiation before activateBus: offer mono/stereo for
  <=2ch audio buses, keep wider arrangements; result logged, not fatal.
  Matches REAPER load path so Ozone-class editors see a valid arrangement
  on first attach. Local float regression: Ozone 11 editor opens OK.
2026-09-04 17:34:54 +07:00
admin 014b9ac460 M5: capture editor state -> preset_b64 khi đóng GUI native (JuceFxLoop ghi <job>.preset.json + /fx-gui/close poll) 2026-09-04 11:49:42 +07:00
admin 14fd794e6d M4: /fx-gui redirect vao session fxrt (native-window mode, embed_url=None) + watchdog auto-restart 2026-09-04 11:37:08 +07:00
admin e6d01d90f1 M3: ctrl ring reader (engine -> bridge) dieu khien editor qua SHM
JuceFxLoop them thread ctrlReader poll 2ms: doc FxCtrlCmd ring (key 'ed.open'/
'ed.close'/'ed.show'/'ed.hide'/'ed.resize'/'ed.capture', slot = chain index), dispatch
qua engine.requestEditor (queue thread-safe; GUI tick 30ms pump). w/h ma hoa
trong value: w*4096+h (chinh xac tuyet doi w,h<=4095 — float 24-bit mantissa);
value<=0 -> editor preferred size. SET_PARAM cu (key khac) consume + bo qua an
toan (JuceFxEngine chua co param API — params di trong chain JSON). ctrl.join()
truoc shutdown. E2E test (session SHM that + bridge that, chain purecomp):
ed.open -> window native hien, audio pump khi GUI mo (process+editor song song),
hide/show/resize/capture 4049 bytes, close -> window bien mat, teardown sach
rc=0 — PASS 11/11. Tien de M4 (engine send_editor_cmd + /fx-gui).
2026-09-04 10:53:39 +07:00
admin df4a22b9b4 M2: GUI thread + host window trong juce_fx_bridge (Reaper-style — editor cua CHINH instance DSP)
JuceFxGuiHost: GUI thread rieng chay juce MessageManager runDispatchLoopUntil(10) + tick
30ms inline cadence (JUCE Timer KHONG fire tren GUI thread rieng — da xac minh selftest),
PluginWindow (DocumentWindow native 'FX slot N') attach editor, reconcile dong editor+
window, teardown thu tu. runOnGui(): plugin instance phai tao tren GUI thread — JUCE plugin
gan MM vao thread tao instance, editor tao thread khac -> treo (M1 chi chay vi main thread
vua tao instance vua la message thread); prepare/shutdown bao qua runOnGui.
JuceFxLoop: guiHost.start() TRUOC engine.prepare; re-prepare sau waitEditorsClosed(1500);
teardown runOnGui(shutdown) truoc stop(). Idle ~0 CPU (khong feeder, khong instance 2).
juce_fx_gui_selftest (khong ship) PASS tren purecomp + fast-compressor: open/hide/show/
resize/close, teardown sach; window native chup duoc (PrintWindow). Regression M1 selftest OK.
2026-09-04 10:40:46 +07:00
admin 0d22e8b4d3 M1: engine editor host API (Reaper-style, editor cua CHINH instance DSP trong graph) + selftest
JuceFxEngine: requestEditor/pumpEditorQueue/isEditorOpen/takeCapturedState, queue thread-safe,
thuc thi tren GUI thread; shutdown() dong editor truoc graph.clear(); prepare() map slot->processor.
juce_fx_bridge link juce_gui_basics; target juce_fx_selftest (khong ship) verify open/close/capture
voi VST3 that — PASS tren Focusrite fast-compressor_x64. Tien de M2 (GUI thread + host window).
2026-09-04 09:59:29 +07:00
admin 6a74631cba V45.46: GUI embed VST full-panel trong DAW - phuc hoi embed (frame-capture ~10fps, relay input), bo toolbar header 'X Dong GUI' trong VstGuiEmbed + bo bar FX RT telemetry trong Mastering (phan tach GUI vs chain FX slot = border chain strip); dong GUI = chain card / module builtin / chon VST khac / onDead; projects API /disk list+open + api.js wrappers; plugins.py them SF_FXGUI_FLOAT=1 khi spawn bridge GUI; FxGuiServer/RenderFxJob fix GUI embed frame capture + show/hide re-anchor theo panel rect. Rebuild daw_vst_bridge+fx_vst_bridge+plugin_host v=202609032200. 2026-09-03 21:28:20 +07:00
admin db9123438d V45.45: fix GUI embed VST den tren box (Nectar/iZotope) - first-paint kick real click + BitBlt black-frame fallback + on-screen parking MAC DINH (SF_FXGUI_EMBED_ONSCREEN=0 de tat) + plugins.py log TAT CA stdout bridge (khong nuot dong truoc SF_FXGUI_PORT=) + auto-open GUI khi add VST FX vao Mastering slot. Rebuild daw_vst_bridge+fx_vst_bridge+installer NSIS. 2026-09-03 07:13:21 +07:00
admin f958348a20 V45.44: fix Ozone 11 GUI den tren Intel UHD 630 - env SF_FXGUI_EMBED_ONSCREEN giu window tren man hinh (HWND_BOTTOM tai rect panel, duoi DAW) de DWM redirect GPU surface thay vi park -20000 (PrintWindow chi capture duoc window dang tren monitor); EMBED_ONSCREEN tuong duong ATTACH_ONSCREEN (khong regress crash attach); /hide reset anchored/dance de reopen re-place dung; them SF_FXGUI_DEBUG=1 log [FxGuiDbg] moi 2s (served/capOk/okB/okP/avg/vis/rect/anchored) lam ground truth cho lan test toi; captureHwndToJpeg expose okB/okP. Rebuild daw_vst_bridge+fx_vst_bridge+installer NSIS. 2026-09-02 21:47:16 +07:00
admin 244dc8ee9e V45.43: fix Ozone 11 GUI crash on Intel UHD 630 + load diagnostics
Root-cause hypothesis: fx_vst_bridge parked embed window offscreen (-20000,-20000)
during VST3 editor attach; Ozone 11 GL init null-derefs (c0000005 in
iZOzone11Core.dll+18f6b92) on Intel ICD. Reaper hosts window on-screen -> OK.

- RenderFxJob.cpp: env toggle SF_FXGUI_ATTACH_ONSCREEN=1 -> SetWindowPos(100,100)
  before fxGuiLoadAttach, park back offscreen after attach succeeds
- main_fx.cpp: FxCrashDumpHandler prints [CRASH] in <module>+0x<offset> and
  [CRASH] minidump: <path> so logs name the faulting plugin DLL directly
- app.jsx VstGuiEmbed: frameLoadedRef + 90s watchdog -> onDead if bridge alive
  but no frame (no more infinite 'Dang tai plugin VST...' flash); clearer onDead
  toasts with %TEMP%\sf_dumps\fx_bridge_crash_*.dmp hint (track + master)
- rebuild fx_vst_bridge + daw_vst_bridge, NSIS/MSI v=202609021809
2026-09-02 21:08:49 +07:00
admin 9f3b072be0 V45.42: xoa toolbar label 'VST GUI - nhung (frame-capture)' trong VstGuiEmbed (GUI hien thi thang o row, khong con header bar) + fix flash trang khi load GUI embed o tang C++: RenderFxJob.cpp them global g_fxGuiEditorReady (set sau khi editor attach thanh cong tren pump thread), FxGuiServer.cpp /frame tu choi 503 khi chua ready, tinh mean-luma trong captureHwndToJpeg de loai frame trang/den (avg <0.02 hoac >0.98), cache g_lastGood de serve frame tot cuoi thay vi frame blank khi window dang repaint. Rebuild daw_vst_bridge+fx_vst_bridge+engine+installer NSIS/MSI v=202609021810. 2026-09-02 18:31:41 +07:00
admin 0da2a41330 Merge remote-tracking branch 'origin/main' 2026-09-02 17:46:12 +07:00
admin 328f3506bb V45.41: fix 4 loi Mastering Panel tren may khac - xoa toolbar Delta Listen (IRC/EQ Presets/Learn Input Gain), xoa nut 'X Dong GUI' VstGuiEmbed, GUI embed chi mo theo click (bo auto-open khi vao panel + bo persist _persistMasterGuiOpen), fix flash VST GUI bang frame preload single-flight + throttle /show theo rect, fix chip 'Server' nhap nhay (hysteresis: offline sau 3 fail lien tiep, timeout 6s). Rebuild engine+installer v=202609021718. 2026-09-02 17:40:07 +07:00
admin d8e5f52017 V45.40: fix bridge crash-dump hardcode duong dan may dev (C:/Users/locpham/...) -> %TEMP%\sf_dumps (GetTempPathA) - audit cross-machine. Rebuild bridge+engine+installer NSIS/MSI v=202609021627. 2026-09-02 16:50:02 +07:00
admin b153850d5c V45.39: fix installer khong cai VC++ redist -> VST FX 0x7E tren may sach
Root cause: bridges (/MD) import MSVCP140.dll/VCRUNTIME140*.dll nhung installer
KHONG bao gio cai VC++ redist. hooks.nsh dinh nghia macro 'customInstall'
- ten Tauri v2 khong goi (template dung NSIS_HOOK_POSTINSTALL) -> macro chet,
vc_redist.x64.exe khong duoc nhung, khong chay. May phat trien chay duoc vi
co MSVC BuildTools (redist san); may user sach: bridge khong start duoc ->
moi VST/VST3 FX khong load (GUI khong mo), plugin /MD khac (iZotope core...)
bao 0x7E.

Fix:
- hooks.nsh: doi macro thanh NSIS_HOOK_POSTINSTALL; vc_redist dong goi nhu
  bundle resource ->  (File tuong doi trong macro resolve theo thu muc
  installer.nsi sinh ra, khong phai src-tauri -  cung vay).
  ExecWait /install /quiet /norestart; xoa file sau khi cai xong (rc 0/3010).
- tauri.conf.json: resources + vc_redist.x64.exe; nsis installMode perMachine
  (vc_redist can elevation; DAW scan Program Files plugin dirs).

Verified: 7z l installer -> vc_redist.x64.exe embedded; installer.nsi insert
NSIS_HOOK_POSTINSTALL; INSTALLMODE perMachine; makensis OK. NSIS +387MB.
MSI (WiX) van khong cai redist - can cai tay tren may dung MSI.
2026-09-02 12:46:24 +07:00
admin 29b5f053a0 V45.38: suppress iZotope 0x7E dialog
- _is_vst2_dll: pure-Python PE export-table check (magic-aware dd offset
  PE32+112) -> IZOzone11Core.dll (runtime lib, no VSTPluginMain) dropped
  from VST2 lists in _scan_plugins and list_scan_all; plugins.py same.
- _hidden_desktop_startupinfo: scan subprocess runs on hidden desktop
  (user32 CreateDesktopW, HDESK restype) -> third-party MessageBox invisible.
- SetErrorMode(SEM_FAILCRITICALERRORS|SEM_NOOPENFILEERRORBOX) in all 4
  bridge mains: missing dependency DLL fails silently instead of blocking.
2026-09-01 20:10:33 +07:00
admin aee537a0af V45.37: rebuild installer full (frontend+engine+bridge) - NSIS+MSI moi chua V45.35 (Plugin Manager Scan) + V45.36 (SF2 preset fallback). Bump v=202609011809. 2026-09-01 18:33:45 +07:00
3dtours c8e2d0f6e2 V45.37: build_windows.ps1 full-build - dung path CMake build/bridge-win (vcxproj+Release), Continue+LASTEXITCODE (native stderr), kill engine theo path khong dong production 2026-09-01 12:26:04 +07:00
3dtours 855a753e26 V45.36: build_install.ps1 robust voi native stderr (Continue+LASTEXITCODE), kill theo path install/dist khong dong production 2026-09-01 12:12:18 +07:00
3dtours 400b5e5370 V45.35: fix build_install/build_windows copy layout PHANG - Copy-Item wildcard tran noi dung _internal ra root (exe treo luc chay); dung robocopy /MIR giu dung cau truc onedir exe+_internal 2026-09-01 11:44:06 +07:00
3dtours 1932467539 V45.34: ban cai phai SACH - engine.spec loai dev config (DB/.secret_key/plugin_dirs.json/sf_scan_state.json) khoi bundle; build_install.ps1 + build_windows.ps1 fail-fast neu dist dinh config dev (reset ve mac dinh cho nguoi dung moi) 2026-09-01 11:31:13 +07:00
locpham 4713f8a8a1 V45.33: fix Plugin Manager VSTi liệt kê nhầm VST FX (Ozone Pro/Tonal Balance Control Pro) làm instrument - /available chặn entry UNKNOWN theo tên (bridge timeout introspect VST3) + _norm_path_stem 2026-09-01 10:37:12 +07:00
admin 60a87626f0 V45.36: fix SF2 preset thieu tren soundfont non-GM (Cajon.sf2) - fluidsynth error 'There is no preset with bank number 0 and preset number 40/44' lam track violin/contrabass silent. selectProgram/programChange gio fallback 3 bac: (bank,program) -> (0,program) -> (0,0) thay vi chi bank128->bank0 (fluidsynth giu preset cu -> sai am). Rebuild daw_vst_bridge MSBuild 20260901-1003. 2026-09-01 10:03:55 +07:00
admin 5467c50fb7 V45.35: fix Plugin Manager scan - nut Scan (dirs list) onClick truyen SyntheticEvent lam dirsOverride -> dirs=event -> savePluginDirs({plugin_dirs: event}) -> Tauri invoke JSON.stringify gap __reactFiber$ circular (HTMLButtonElement) - loi 'Converting circular structure to JSON' khi scan Soundfont/VSTi. Fix: onClick: () => saveAndScanDirs(). v=202609010955 2026-09-01 09:56:19 +07:00
admin cb89d374ff V45.34: rebuild bundle v=202609010910 (build_windows.ps1 full - precompiled + index bump, sf-fx-realtime.js?v=202609010910) 2026-09-01 09:31:37 +07:00
admin 848bbf4d15 V45.33: rebuild bundle - bump v=202609010905 (precompiled + index, sf-fx-realtime.js?v=202609010905), rebuild 3 native bridge (daw_vst_bridge/fx_vst_bridge/plugin_host) tu source 20260831-2149 bang MSBuild 20260901-0905 2026-09-01 09:10:14 +07:00
admin 5f8844637e V45.32: fix (1) latency preview MIDI keyboard - flush ring bridge sink (bridgeAudioWorklet _MAX 32 ~170ms audio cu render truoc) tai idle->active live note-on trong __clearMasterFxQueue (cung dieu kien V45.26: _liveHeldCount===0 && im lang >500ms) de note moi nghe ngay; guard _timelinePlaying (khong flush khi timeline dang play); (2) crackle VST2 tremolo/loop - overrun crossfade tich luy moi block drop cong 256 mau cap 1024 (~21ms) thay vi co dinh 64 mau (1.3ms qua ngan -> blip/wow khi drop loat block o chord nhieu voice) (tai lap tu V45.28, giu ring 32 de latency thap). v=202608311858 2026-08-31 19:00:24 +07:00
admin 21cc8421a5 V45.31: REVERT V45.28 (4ed1de6) ve dung trang thai b64343a (V45.27) de kiem tra latency cao - ring worklet 32 block (~170ms), worklet URL v=202608311809, bo overrun crossfade tich luy 256/cap1024 cua V45.28. v=202608311809 2026-08-31 18:48:08 +07:00
admin 833f3bd158 V45.30: REVERT V45.29 (a069773) - V45.29 ring worklet 80 (~426ms) gay latency cao khi preview midi keyboard (ring luon day, do tre = dung ring cap) va crackle khi Chord VST2; quay ve V45.28 (4ed1de6): ring 48 (~256ms), worklet URL v=202608311820, bo log worklet_stats dinh ky. v=202608311820 2026-08-31 18:44:12 +07:00
admin a069773d4a V45.29: fix wobble preview VST2 chord van con sau V45.28 - ring worklet bridgeAudioWorklet 48->80 block (~426ms) phu stall render loop C++ toi ~361ms do tu log (fxrt_bridge loopMax=361ms, fxrt_pump pump_gap 362ms, longtask d=346): ring 48 (256ms) van khong du -> underrun lap lai fade ve 0 = wobble; them worklet_stats log dinh ky moi ~2s vao dbg.log (preview_diag chi fire keybed/vkb, duong preview khac khong log ws= duoc) de xac minh ov/un sau fix. v=202608311832 2026-08-31 18:32:37 +07:00
admin 4ed1de638d V45.28: fix wobble preview VST2 loop/tremolo khi nhan chord - ring worklet bridgeAudioWorklet 32->48 block (~256ms) hap thu stall render loop C++ khi chord nhieu voice (stall >170ms -> underrun lap lai fade ve 0 nghe nhu wobble; 16->32 V45.27 da dung crackle, 32 chua du cho chord); overrun crossfade tich luy moi block drop cong 256 mau cap 1024 (~21ms) thay vi co dinh 64 mau (1.3ms qua ngan -> blip/wow khi drop loat block o chord nhieu voice). v=202608311820 2026-08-31 18:20:53 +07:00
admin b64343aac6 V45.27: fix (1) PR tab preview cam khi sub-tab PR khong ARM - ARM MAIN/SECTION cuc bo, khong leak sang PR (3 nhanh: vkbNoteOn prArmedIds + attachMidiHandler bridge bPrArmed + SonicSF arSubs them && isArmed); (2) crackle preview VST2 instrument loop/tremolo - ring worklet bridgeAudioWorklet 16->32 block (~170ms) hap thu stall render loop C++ khi instrument xu li loop/tremolo nang CPU (8->16 truoc da dung tremolo, 16 chua du); them stats overrun/underrun tu worklet -> getDiag/preview_diag (ws=ov/un) de xac minh con crackle khong. v=202608311809 2026-08-31 18:10:47 +07:00
admin 72ae2c8a9a V45.26: fix wobble/crackle khi preview MIDI keyboard nhan (1/8 lien tuc) o MAIN/SECTION/PR tab. Root cause: unifiedMidiRouter.pushEvent clear master FX outQueue (__clearMasterFxQueue, V31 fix lag idle backlog ~341ms) tren MOI live NOTE_ON -> rapid notes: moi note wipe queue dang chua tail note truoc + resume fade-in 43ms -> cat tail (crackle) + fade nhap nhay (wobble). Fix: chi clear khi that su idle->active (khong con note dang giu VA im lang >500ms) — dem _liveHeldCount + _lastLiveEventAt; note dang ngan / chuoi note nhanh giu queue. Timeline (live=false) khong doi. v=202608311756 2026-08-31 17:56:17 +07:00
admin fbefa7e864 V45.25: fix ARM leak trong PR tab - preview chi track dang edit. Root cause: vkbNoteOn + attachMidiHandler (bridge bPrArmed va SonicSF arSubs) gom ARM tu TAT CA sub-tab PR (forEach s.isArmed) + track MAIN isArmed -> ARM track 1 leak sang PR tab track 2 (khong ARM) van nghe nhac cu track 1. Fix: trong PIANO_ROLL tab, target = duy nhat sub-tab PR dang active (activeTabRef), bat ke isArmed; MAIN/SECTION giu nguyen (ARM moi, khong ARM -> cam + toast). v=202608311739 2026-08-31 17:39:40 +07:00