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
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
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
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
945e63918d
V45.6 fix solo Q3: bo stopAllPlayback+restart 60ms khi solo main-session (track solo giu nguyen tieng, het wobble re-attack); GIU timelinePitchesRef qua stop - kill branch NOTE_OFF tung pitch (Qin im khi solo track khac, truoc day tset=0); C++ allNotesOff sandbox VST2 qua control 7 (child panic local CC64/CC123+128 noteOff) thay 128 note-off flood queue 64-cap (Qin het treo sau STOP); IPC toggleSolo tu applyAllTrackMuteSolo (ref patch + kill); v=202608292138
2026-08-29 21:39:59 +07:00
admin
72ae22f865
V45.5 instrument solo path (Q3 debug): dbg log solo_toggle/solo_apply/solo_kill/solo_guard/play_tracks - lan test toi thay ro trang thai ref + note bi block; C++ [Vst2Sandbox] ON/OFF/CC log trong SandboxVst2Host (Qin chay sandbox, truoc day midi vao Qin hoan toan mu trong bridge.log - chi VST3 log [midi]), v=202608291806
2026-08-29 18:09:16 +07:00
admin
f3fd0109a7
V45.2 fix Qin silence (20s audio-thread stall) + SF loop downbeat delay
...
- SandboxVst2Host::loadSerializedState: queuePreset non-blocking (byte-identical
echo never matched -> waitApply always burned 20s TIMEOUT on the audio thread;
VST2 restore runs via runOnMain so every startup silenced ALL audio ~20s = Qin
'failed that su'). Bridge now holds reloading + defers saveStateJob until the
child republishes a different chunk (clobber protection, no audio block).
- sf-fx-realtime clear_queue('loop'): truncate old tail to KEEP=4 blocks
(~21ms) instead of keeping FILL 24 (~128ms) -> wrap downbeat no longer ~110ms
late; skipFade crossfade masks the truncation jump, seam crossfade recount.
- bump ?v= 202608291721 (app.jsx x2, index.html x2); deploy 3 _internal + dist.
2026-08-29 17:25:32 +07:00
admin
c084ac8ba7
V45: D17 seamless loop wrap + D18 stop solo note-off (Qin) + D18b/c guard + engine VST load fixes
...
- D17: wrap_info/wrap-skip, fx wrap xfade, playhead-derived scheduling
- D18: solo stop -> NOTE_OFF all sounding timeline pitches + CC123/CC120
- D18b: track audible gain guard, tracksRef fallback
- D18c: timelinePitchesRef per-track Set, kill at applyAllTrackMuteSolo
- bridge ring _MAX 16, index v=202608290928
- plugins.py/vst_engine.py/fx_realtime.py/JuceFxEngine.cpp: VSTi load + Qin fixes (uncommitted 12:18)
2026-08-29 16:39:02 +07:00
admin
2afa828c8f
V44: fix crackle - uu tien audio thread bridge (HIGHEST) + FILL 24 (cushion ~90ms) PDC 7936
2026-08-28 17:22:50 +07:00
admin
6cbdbd8e9c
G3: 1 clock - PDC latency that + playhead engine-derived
2026-08-28 15:51:19 +07:00
admin
c72362e088
G2: JUCE VST3 hosting + latency that qua FxLatReport - probe pureComp 2108
2026-08-28 15:28:06 +07:00
admin
091abe5a91
G1: them G1_RESULTS.md
2026-08-28 12:35:59 +07:00
admin
9c0d35def4
G1: JUCE engine SHM chain rong POC - probe pass, khong lag them
2026-08-28 12:35:37 +07:00
admin
d7dd626dd5
G0: dich chinh - khong co drift bridge (run2 drained=True, recv=sent=10000), rut de xuat bu drift
2026-08-28 12:15:27 +07:00
admin
d78af9304f
G0: baseline latency do xong - gate G2 mo, drift bridge -0.5% phat hien
2026-08-28 12:03:13 +07:00
admin
24109f8bc4
v15b: fix CC7 to VSTi (legacy tag kHostMidiCC+cc + volume-param fallback), CC lane grid + 0/+- labels
2026-08-26 16:45:42 +07:00
admin
2c96a223af
feat: CC11 expression automation (spec midi_note_cc11_expression)
...
- MIDINote schema + expression_curve (position_ratio 0..1, value 0..127)
- Piano roll CC lane mode Expression (CC11): draw/move/del anchors
- Offline: _expression_events grid 64 samples -> job.events -> RenderJob.cpp sample-accurate CC
- Realtime: scheduleNoteExpressionCC11 grid 16ms via bridge pushEvent / SonicSF fallback, epoch-guarded, cleared on stop
- tests/test_cc11_expression.py 6/6 (unit interp/grid/clamp + integration energy follows curve)
- rebuild daw_vst_bridge (narrowing fix) + sync binaries/dist, babel rebuild + sync 5 copies
2026-08-26 11:14:56 +07:00
admin
5b747606c7
Rebrand SonicForge Studio -> ScoreFX Studio: UI names, About logo, favicon + icons for all exe builds
2026-08-24 19:28:22 +07:00
admin
59e4951912
fix(fxrt): toggle VST bypass khong reload plugin - cache instance trong bridge, chain giu slot bypassed, bypass state trong chainKey, poll 100ms + fade-in 512 samples che gap latency
2026-08-24 16:56:10 +07:00
admin
3a3f46b7d3
fix(fxrt): mo GUI VST khong gay crackle - GUI spawn BELOW_NORMAL, mien watchdog khi mo native GUI, realtime loop ABOVE_NORMAL
2026-08-24 16:38:52 +07:00
admin
e12a8d754a
fix(fxrt): chan out ring overflow trong bridge (backpressure, het pointer collision)
2026-08-24 12:25:14 +07:00
admin
4240f15e30
fix(engine): defer set_param ra worker thread, VST API khong goi tren audio thread
2026-08-24 12:03:05 +07:00
admin
21130858d6
fix(engine): giam jitter bridge timer va fade-out khi transport stall
...
- RealtimeFxLoop: timeBeginPeriod(1) + sleep_until thay Sleep(1) -> loopMax 32.9->24.8ms
- plugins.py _pump_output: stall-fade 8 block gain 1->0 khi gap > 5.5*block_sec (~29ms),
burst send, fade-in 0->1 khi resume; poll dung asyncio.to_thread(time.sleep) vi asyncio.sleep
bi cap 15.6ms tren Win11 (IOCP) du timeBeginPeriod
- fx_realtime.py: stats dem publish/drop/stale/read cho diagnostics
- rebuild bridge binary
2026-08-24 10:40:21 +07:00
admin
10997a65b9
fix(fx-rt): het crackle master FX - limiter attack smooth + crossfade khi bat/tat chain
...
- NativeInstrumentEngine: kAttack 0.9->0.1 (het zipper khi sum nhieu track)
- app.jsx: crossfade masterFxDryGain/masterFxGain thay hard-rewire graph luc
activation/deactivation master chain FX; worklet bao 'started' -> ramp dung
luc; PDC tre sau khi dry silent (tranh gap 80ms)
- sf-fx-realtime.js: fade-in 512 mau luc FILL xong / resume sau underrun
- index.html + addModule: cache-buster v=202608241200
- rebuild app.precompiled.js, copy bundle vao dist/ + src-tauri/resources/
- keo dai fix cac round truoc: FILL 16, FXRT_BURST_MS, REBUFFER, pacing,
VST GUI click/focus, solo crackle
- them harness + plans/patch scripts
2026-08-24 07:46:09 +07:00
admin
373a96cf7b
fix(fx-gui): bring plugin window to top before real click (anchored mode)
...
Real-input clicks were landing in whatever window sat above the anchored
plugin window (foreground Chrome in tests) — WindowFromPoint at the click
point returned the browser, so the editor never saw the input. Attach to
the foreground thread, SetForegroundWindow + BringWindowToTop before the
click (still non-TOPMOST — no floating regression from 80c663e ).
2026-08-23 18:09:52 +07:00
admin
80c663e419
fix(fx-gui): re-enable real-input fallback (anchored, non-topmost)
2026-08-23 16:47:38 +07:00
admin
0acc3ee7ee
fix(fx-rt): burst 4-block input batch qua bridge — hết lag/giật/crackle master FX
...
- worklet gom 1024 mẫu (4 block) vào 1 frame interleaved, main thread tách 4 WS frame 512 floats
- bridge take=min(avail,4) xử lí 1 call process cho burst → overhead VST3 amortize 4 lần
- engine _pump_output pace theo deadline thay vì sleep cố định (outRead 131→187.5/s)
- FX_RT_ROUNDTRIP_SAMPLES 512→1792 (RTT batching ~7 block)
2026-08-23 11:44:54 +07:00
admin
3ad379f0ba
Gap 10: multiband compressor + de-esser (LR4 crossover, UI, test_62)
2026-08-23 08:25:07 +07:00
admin
c8c49b6b9c
Gap 4: MaximizerFx oversample 4x soft-clip + ceiling — zero-stuff + FIR33 anti-alias + post-decimation clamp (giảm aliasing fold-back, sample peak <= ceiling); test_61: impulse delay 8 mẫu, unity transparent, alias 9.1k -117dBFS, ceiling -1dB (24 passed)
2026-08-23 07:59:33 +07:00
admin
35076f680b
C: realtime VST3 setParam live — Vst3Fx::setParam (title/shortTitle->ParamID, setParamNormalized + inputParameterChanges queue), RealtimeFxChain dispatch vst3, test_60 delay 1s->0.25s giua stream khong restart
2026-08-23 07:36:43 +07:00
admin
17e22bcf32
D2: LimiterFx brickwall — lookahead 1-5ms + oversample 4x + hard clip, UI toggle SOFT/BRICKWALL + LOOKAHEAD ms
2026-08-23 07:23:52 +07:00
admin
c3aba40ffe
Phase 4+5: WebAudio I/O shim + verify DAW checklist — live=export, order, fader, PDC, smoke
2026-08-22 21:02:52 +07:00
admin
e5c957fc87
Phase 3: engine render chain hop nhat — track/master doc mastering_settings.chain (imager/maximizer), PDC probe FX_LATENCIES, fix daw_vst_bridge link BuiltinFxChain, pytest 3.2/3.3
2026-08-22 20:17:59 +07:00
admin
1390ad545b
Phase 2: BuiltinFxChain C++ (8 DSP) + control ring SET_PARAM/REPORT_LATENCY
...
- native_bridge/src/BuiltinFxChain.{h,cpp}: 8 builtin DSP port 1:1 từ
Python _apply_builtin_fx_chain (eq/eqpro/compressor/limiter/exciter/rebalance)
và JS MASTER_MODULE_IO (imager/maximizer). Biquad RBJ DF2T, block-wise
stateful. createBuiltinFx trả nullptr cho gain/normalize (legacy).
- RenderFxJob: FxSlot thêm bfx, parse builtin 8 loại, runBuiltinSlotSafe SEH,
realtimeRunChain nhánh builtin, chainGen()/entryLatencies(), setParam
áp live lên bfx; Vst3Fx latencySamples từ getLatencySamples().
- RealtimeFxLoop: drain ctrl ring (SET_PARAM -> chain.setParam, drop cũ khi
đầy) + REPORT_LATENCY khi gen đổi (ipc->lat[] ring, lastGen).
- FxRealtimeIPC.h: header 18 u32 (72B), ctrl/lat slots 8, FxCtrlCmd 24B,
FxLatReport 8B, static_asserts.
- app/core/fx_realtime.py: mirror header 72B (ctrl_write/read, lat_write/read,
slots), set_param ghi ctrl ring qua _ctrl_enqueue_locked (guard shm),
get_latencies drain lat ring qua _lat_drain.
- tests/test_builtin_fx_golden.py: golden SNR C++ vs Python (8 cases, ngưỡng
30dB) + order test eq/compressor xen kẽ.
- TASKS_DAW_A.md: tick 2.1-2.9.
Test: 136 passed (4 fx_realtime_chain + 8 builtin golden + regression).
2026-08-22 19:55:08 +07:00
admin
5ad2c681e7
Remove Carla native VSTi bridge entirely
...
Drop Carla integration across frontend and backend:
- plugins.py: remove /carla-midi, /carla-status, /carla-stop, /open-in-carla,
/carla-play-notes endpoints and Carla process management
- runtime.py: remove find_carla / _carla_* helpers, detect and capabilities
- app.jsx: remove Carla bridge UI, SonicCarlaMidi routing, shouldRouteCarla
guards, VST row Carla button and preset fallback
- system.py: remove /carla-path
- Keep audio path unchanged (tracks -> masterBus -> output -> analyser),
directOut only for offline render
Build frontend, tests pass (124 passed).
2026-08-22 18:39:49 +07:00
admin
f143646ba7
fix(fx-gui): /show resize window+plugin view theo rect panel (layout khớp ô embed) — giữ offscreen, không topmost; sync sidecar mới vào bundle _internal
2026-08-22 17:52:16 +07:00
admin
4bb0db2b21
fix(fx-gui): meter VST chạy đúng — bỏ điều kiện inRead chặn peek + chống race lúc load + ẩn cửa sổ native floating
2026-08-22 17:36:31 +07:00
admin
8346bc3041
build(native): rebuild bridge + commit sidecar binary để feature theo push
...
- fix compile: performEdit dùng setParamNormalized (setParamFromEdit không tồn tại trong SDK này)
- rebuild fx_vst_bridge.exe/daw_vst_bridge.exe/plugin_host.exe (chứa /shm route + SHM audio feeder)
- src-tauri/binaries: hết ignore, commit binary + dll + vst3scan.json — máy khác clone về có ngay feature native
- xóa rác app.precompiled.js.bak + dọn bundle dirs (.bak/.new/_diag/.pytest_cache)
2026-08-22 17:12:18 +07:00
admin
6dfe390bda
feat(fx-gui): đưa audio vào process GUI — meter VST nhảy theo âm thật qua SHM peek
...
- GUI process peek ring SHM đầu vào (không consume, không tranh chấp RealtimeFxLoop)
- gọi fx->processAudio() trên instance GUI để meter/UI plugin chuyển động theo âm thật
- performEdit forward sang controller -> meter điều khiển bởi param cũng cập nhật
- bridge /shm: frontend đẩy tên session live vào mỗi GUI đang mở (start/stop/open)
- tests: 127 passed
2026-08-22 17:06:37 +07:00
admin
6ba38286ad
fix(master-fx): loại double-processing khi load VST FX vào master fx chain
...
- Bỏ push setFxChain xuống native bridge (T2.4) — SHM fxRt loop (fx_vst_bridge
--realtime-fx) là nơi xử lý live master mix duy nhất; trước đây MIDI/VSTi
instrument bị xử lý 2 lần (native bridge + SHM loop) → over-process,
âm bể/crackle. setFxChain vẫn dùng khi Export/Offline render.
- closeMasterGui/closeFxGui: POST /close (kill process) thay vì /hide —
không còn cửa sổ floating always-on-top lơ lửng, tắt được dứt điểm.
- openFxGui already_running kèm embed_url → mở lại embed panel thay vì chỉ toast.
- open_fx_gui (plugins.py): spawn fx-gui với SF_PARENT_PID=<engine pid>.
- RenderFxJob.cpp: watchdog thread trong run_open_fx_gui/run_fx_gui_server —
engine chết → WM_CLOSE, GUI process tự thoát, không để lại cửa sổ mồ côi.
2026-08-22 16:53:20 +07:00
3dtours
681cab4f25
fix(plugin-manager): xoa/add dir luu dung dir moi (stale closure); loc plugin file da mat khoi disk; scan VST3 giam timeout module con lai 4s va subprocess 300s
2026-08-22 15:10:35 +07:00
3dtours
c07b792bd4
debug(renderfx): log tung buoc load VST3 de xac dinh diem treo (Ozone Pro)
2026-08-22 11:54:48 +07:00
3dtours
ac5a171464
fix(build): setPluginSearchPath khong dung std::filesystem (block-scope alias gay C2371/C2088 tren MSVC) — dung GetFileAttributesA + find_last_of
2026-08-22 02:49:58 +00:00
3dtours
2a4ae86f5a
fix(fx-bridge): SetDllDirectoryW truoc Module::create — plugin VST3 can DLL dep canh no bi LOI 0x7E (ERROR_MOD_NOT_FOUND)
...
- SDK module_win32 LoadLibraryW khong search thu muc plugin cho dependency DLLs
- setPluginSearchPath: bundle folder -> Contents/x86_64-win; file don -> parent dir
- ap dung ca render (vst3FxLoadInner) lan scan (scanModuleInner)
- test: ~30 plugin iZotope/RX load OK; Melodyne COM 0x80010106 la plugin dac thu (STA+license)
2026-08-22 02:45:45 +00:00
3dtours
eecc4501bc
perf(scan): timeout/module 30s->12s (Ozone treo vinh vien), subprocess 600->180s
2026-08-22 02:05:49 +00:00
3dtours
dd2a320b2a
fix(scan): fx_vst_bridge --scan timeout per-module 30s + emit UNKNOWN thay vi is_instrument=true
...
- RenderFxJob: safeScanModule chay tren worker thread + TerminateThread neu
Module::create treo >30s (Ozone 11 Clarity treo vinh vien, SEH khong bat
hang) -> scan khong bao gio ket thuc -> list_fx() timeout -> fx_paths rong
-> filter /available vo hieu -> nut Synth hien ca VST FX
- Module crash/hang -> emit is_fx=false,is_instrument=false (UNKNOWN) thay vi
is_instrument=true (truoc day xep VST FX crash vao danh sach instrument)
- vst_engine: list_scan_all() tra toan bo (FX+instrument+unknown); list_fx()
loc is_fx tu cache chung
- plugins.py /available: loai ca fx_paths lan unknown_paths khoi
vst_instruments -> nut Synth chi hien VSTi that
2026-08-22 01:53:21 +00:00