admin
4932bb88db
fix(bridge): restore VST2 preset chunk on respawn + offline render (Qin silent fix)
2026-08-20 10:18:18 +07:00
admin
7c22ae1f02
refactor(bridge): split fx bridge, stabilize VST3 host chain, drop old install engines
...
- remove diagnostic canaries from audio hot path (crackle fix) and
stuck C5 note raw-MIDI test (Vst2Instrument::init noteOff)
- split native bridge into daw_vst_bridge (VSTi) + fx_vst_bridge (VST FX)
- VST3: processData prepare before setActive, zero input buses, accept
both .vstpreset and bridge-state blob in RenderJob presets
- native_render/vst_engine: bridge-exe discovery + render_fx_chain + /fx-gui
- delete old install/ engine binaries (install via sidecar+resources now)
- add BUILD_LAYOUT.md, build_selfcheck, tools/ diagnostics
2026-08-20 09:42:42 +07:00
admin
5df96aef1e
fix(bridge): deploy ABI-fixed VST2 binary to install + open GUI for VST2 tracks
...
Qin_RV_x64.dll (Kong Audio) crashed with SEH 0xc0000005 in Bridger64.dll
using the stale install binary (pre-ABI-fix). Copy native_bridge build
Release binary into install/ so the packaged app runs the fixed host.
Also open the native GUI after loading a VST2 instrument (previously
VST3-only), so Qin_RV's editor (Qin_VST_Window via auxhost.exe) shows
automatically on track load.
2026-08-19 22:36:28 +07:00
admin
819257a1b3
Fix bypass JSON bool + load SF2 tracks into bridge on restore
...
- RenderFxJob: parse bypass as JSON bool (memberBool) — bypass:true
previously ignored (memberInt parses numbers only), plugin kept
processing. Verified: bypass RMS == plain, VST3 loaded once.
- preloadTrackInstruments / bridge reconnect: load SF2 instruments
into bridge too (loadAnyTrackToBridge) — opened projects with SF2
tracks sent MIDI to empty bridge channels (C++ silent), never
reaching the native mastering chain.
- rebuild app.precompiled.js from app.jsx (was stale: missing A14).
2026-08-19 21:55:48 +07:00
admin
51f12113fa
plan: quyet dinh Scaler=VSTi (scan that xac nhan), ket luan Ozone -Inf giu huong (c)
2026-08-19 21:23:14 +07:00
admin
b10b0e77f4
Phase 1-2 (PLAN_MASTERBUS_FX_RACK_VST): tests cho render_fx_chain + API fx-render; plan HOÀN THÀNH Phase 0-4
...
- test_native_render: render_fx_chain builtin gain e2e (bridge --render-fx)
- test_plugin_api: POST /api/v1/plugins/fx-render builtin gain
- PLAN_MASTERBUS_FX_RACK_VST.md: cap nhat trang thai cac phase (0-4 da implement tu cac commit truoc + phan nay)
2026-08-19 21:21:33 +07:00
admin
45a7bdebfa
Phase 0 (PLAN_MASTERBUS_FX_RACK_VST): banner ra stderr de stdout sach cho --scan JSON / --fx-gui port
...
Test /c/tmp/test_fx_phase0.py: 7/7 pass — gain0 bit-exact, gain -6dB RMS/2,
normalize peak<=0.25, empty chain rc=1, Ozone 11 Maximizer VST3 render khac
input (88172 samples), --scan phan loai dung (Ozone is_fx, Scaler 2 instrument).
2026-08-19 21:16:01 +07:00
admin
6a3b430da0
A14: MIDI-out từ plugin (VST2/VST3) → SHM → Rust emit → DAW track
...
- Vst2Instrument: audioMaster callback thu VstEvents, push SHM midiOutQueue
- Vst3Instrument: IEventList output bus (kAudioMasterWantMidi) — check
- SharedMemoryIPC.h: midiOutQueue[64] + midiOutCount (offset 27556/28324, sizeof 28328)
- shm.rs: MidiEventIPC Serialize, drain_midi_out() emit 'bridge-midi-out'
- lib.rs: pump emit midi-out events
- nativeBridgeService.js: onMidiOut API
- app.jsx: route MIDI-out về selected track qua SonicMidiRouter (feedback guard)
- TASKS.md: A14 ✅
2026-08-19 21:12:07 +07:00
admin
6efef85e47
fix(bridge): VST2 host dung ABI SDK — crash outs>2, NaN input, editOpen(NULL), opcodes; docs A14 MIDI-out + phan tich Ozone -Inf
...
- aeffect.h: bo sung opcodes 4-22, 53, 55 + audioMaster 15/41-44 + ERect (dung chuan VST2.4 SDK, DUNE load OK khong crash)
- Vst2Instrument: cap du pointer arrays theo numInputs/numOutputs (fix AV 0xC0000005 Qin outs=32), input fill 0.0f (het NaN poison effect), bo probe effEditOpen(NULL) (crash WaveObserver), GetDirectory + SizeWindow hook, canDo sendVstEvents/sendVstTimeInfo
- TASKS.md: A14 MIDI-out tu plugin (Scaler2/Instacomposer/MelodicFlow xuat MIDI khong phai audio)
- PLAN_MASTERBUS_FX_RACK_VST.md: phan tich Ozone -Inf — chain day du, nguyen nhan = audio DAW khong chay qua bridge master ring
2026-08-19 20:57:16 +07:00
admin
927597a822
fix(tcp): prevent panel scroll when wheeling volume ruler
...
React onWheel is passive so e.preventDefault() was a no-op, letting the
TCP panel scroll and the ruler slip away from the cursor (no snap).
Add native non-passive capture listener that preventDefault()s wheel
events starting on [data-sf-wheel] ruler containers.
2026-08-19 15:05:37 +07:00
admin
2f5c70ac29
Fix master volume + VST3FX GUI state restore on save/reload
...
- serializeProjectToSchema now writes master volume_db and mastering gui_open_path/name
- deserialize restores masterVolume + masteringSettings.gui_open_path/name
- track vst_gui_open_path/name fallback to live state (not just _persistFxGui*)
- MasteringModal/FXRackModal reopen effects react to isOpen + restored gui path
- openMasterVstGui/openVstGui store gui name for reopen
- bridge: /preset capture endpoint + RenderFxJob.captureState for GUI knob state
2026-08-19 14:44:40 +07:00
admin
8874e42596
fix(tcp): move vol/pan ruler wheel+dblclick handler to whole row
...
Scroll wheel giảm/tăng volume chỉ hoạt động trên input 4px; chuyển
onWheel+onDoubleClick lên row div (label+dB span cũng ăn), giữ bubbling
từ input. Áp dụng cho main TCP và sub-tab, cả app.jsx và precompiled.
2026-08-19 12:29:11 +07:00
admin
dbbcb85ffe
Fix fx-gui z-order: anchored window HWND_TOPMOST so real clicks reach plugin over webview; /hide demotes
2026-08-19 11:39:11 +07:00
admin
2bbe80efa3
fix(bridge): set ringMask=7 on Windows — ring collapsed to 1 slot (slot = writeIndex & 0), dropped audio blocks on GUI jank
2026-08-19 11:20:39 +07:00
admin
77360578fd
fix(gui): embed VST GUI show on mount, health-check timeout/retry, send preset in fx chain (issues 1/3/4)
2026-08-19 10:56:22 +07:00
admin
466b2022f2
fix(fx): apply preset_b64 in realtime FX chain (issue 4)
2026-08-19 10:56:21 +07:00
admin
1dfba14114
fix(gui): persist embedded VST GUI state across panel close/reopen
...
Close/reopen of Mastering panel or FX Rack unmounted the modal, losing
masterGuiOpen/fxGuiOpen state. The native bridge window stayed alive but
hidden, so reopening the panel showed no GUI and no /show was re-posted —
user could not interact with the VST GUI. Persist the embed state at module
scope so remount re-anchors and re-shows the window automatically.
2026-08-19 10:34:52 +07:00
admin
e5ce9ca90a
fix(vst-gui): borderless fx-gui window + anchored re-show (mouse stable)
...
- RenderFxJob: offscreen fx-gui window now WS_POPUP (borderless) so
GetWindowRect == client rect; anchored placement over the embed panel is
exact. WS_OVERLAPPEDWINDOW put the client ~31px lower/right -> cursor
jumped on hover and clicks hit the webview (relay rejected).
- AdjustWindowRect sizes to the window's own style (no caption for POPUP).
- FxGuiServer: mousemove only SetCursorPos while dragging (buttons!=0);
hover no longer teleports the cursor.
- FxGuiServer /show: skip SetWindowPos/resize when rect unchanged (frontend
now re-POSTs /show every ~500ms to re-anchor on scroll/resize).
- app.jsx VstGuiEmbed: drop shownRef one-shot; re-POST /show each refresh.
- Rebuilt bridge (6 locations) + Tauri release (embedded sidecar) + v=202608190002.
2026-08-19 10:22:35 +07:00
admin
da0f8fa40e
feat(native): realtime master FX chain + fx-gui fast start, hide/show, non-topmost
...
- FxGuiServer: HWND_TOP (no longer always-on-top), /hide + /show endpoints,
onStarted callback prints SF_FXGUI_PORT before plugin load (fast connect)
- RenderFxJob: RealtimeFxChain (mutex+worker, SEH-guarded, bypass slots,
deferred Vst3Fx dtor); --fx-gui split into parse/create/load-attach stages
- main: FreeConsole unless SF_KEEP_CONSOLE; control type 6 SET_FX_CHAIN feeds
g_fxChain on the audio loop; shutdown before CoUninitialize
- plugins.py: CREATE_NO_WINDOW on both Popen paths
- lib.rs: set_fx_chain command -> push_control(6)
- app.jsx/nativeBridgeService: setFxChain sync from MasteringModal; panel close
uses /hide + refs to fix closure bug; VstGuiEmbed rect refresh -> /show
2026-08-19 09:59:13 +07:00
admin
c6de0720f4
fix(bridge): anchored fx-gui embed - dance dat window dung panel rect, khong park/restore cursor, resize view qua WM_FXGUI_RESIZE
2026-08-19 09:25:43 +07:00
admin
346ada6e47
fix(bridge): real-input dance dat window tai cursor thay vi goc work-area - het GUI floating ngoai cua so DAW khi click vao embed (iZotope/JUCE reject PostMessage)
2026-08-19 08:25:12 +07:00
admin
0334c2a5a3
fix(backend): find_bridge_exe frozen onedir thieu exe_dir candidate - bridge sidecar nam canh app root ngoai _MEIPASS lam list_fx tra rong (Mastering/FX Rack khong load VST duoc); mirror logic runtime._vst_render_available
2026-08-19 08:15:59 +07:00
admin
0cf771242f
VST FX integration: plugin picker theo category + GUI embed fill viewport (FX Rack & Mastering)
2026-08-19 07:55:57 +07:00
admin
19904bcad8
Merge branch 'standalone-shm-bridge' of https://gitea.labz.io.vn/3dtours/SonicForgeStudio into standalone-shm-bridge
2026-08-19 07:14:07 +07:00
admin
d355016fe7
rebuild exe release: bridge_status ghi loaded_channels (V10) — Rust binary cu thieu field lam JS fallback phai doan; kem schema json regenerate
2026-08-19 07:06:37 +07:00
admin
ec8b57ecb3
V12: fix VSTi GUI khong mo lan 2 khi bridge_status thieu loaded_channels
...
bridge_status (Rust binary cu, chua co V10 field loaded_channels) -> queryStatus
fallback khong co loaded_channels -> lc undefined -> silent return 6626 lam GUI
chet im lang o click 2. Bo silent return: mo GUI truc tiep tren bch, an toan vi
C++ handleOpenGui DEFER khi channel chua co instrument.
2026-08-18 22:58:14 +07:00
admin
0cde007d26
V11 fix GUI silent-return: only skip load when path resolved; refresh bridge state via queryStatus and open GUI on any restored channel
2026-08-18 21:51:02 +07:00
admin
d3a7a0f793
FX GUI embed: WS_EX_TOOLWINDOW + no minimize box for offscreen window (no stray taskbar button that cannot be restored)
2026-08-18 21:35:48 +07:00
admin
d07f626a6c
Fix FX GUI panel frozen: prefer PrintWindow live frame + real-input fallback for GPU-rendered editors
2026-08-18 21:24:33 +07:00
3dtours
77bbbe298d
build(win): rebuild sonicforge-daw.exe - playback fade/stop fixes ( be8af7a)
2026-08-18 20:27:13 +07:00
admin
7bc96eebbc
fix(playback): het note chong am echo o bass - KHONG huy note-off cu cung pitch (Bug 2 huy mui lam note cu khong bao gio tat); giu neu note-off cu bam truoc note-on moi, doi ve ngay truoc note-on neu overlap; sync 6 ban JS + index.html ?v=202608181900
2026-08-18 20:13:53 +07:00
admin
be8af7a6ee
fix(playback): het fade-out dai dang khi stop - restore gain LUON (ke ca stale/play moi trong cua so fade) qua pending fade session, huy fade ngay khi play moi (het dip 200ms); sync 6 ban JS + index.html ?v=202608181840
2026-08-18 19:53:59 +07:00
admin
4ddaf1f26a
fix(playback): het retrigger 'play lai roi tat' khi stop - stop ngay clip source chua phat (playbackState=scheduled) truoc fade, source dang keu giu lai ramp 200ms; sync 5 ban JS + index.html ?v=202608181835
2026-08-18 18:45:32 +07:00
admin
eb5a1483ca
fix(playback): stop transport fade-out that - handleStop goi stopAllPlayback(true) (bo sot v14) + FADE_MS 80->200ms de fade nghe ro, het cat dung; sync 5 ban JS + index.html ?v=202608181827
2026-08-18 18:45:32 +07:00
admin
1e16189da8
fix(playback): stop fade-out 80ms khi nhan Stop/Pause - ramp gain track + bridge gain xuong 0 truoc hard-stop, guard play-gen tranh STOP tre giet play moi; sync 5 ban JS + index.html ?v=202608181818
2026-08-18 18:45:32 +07:00
admin
45a15da55e
fix(midi): playback khong cam loop pass 2+ va note cung pitch khong bi cat (bugs 1-2) - set isPlayingRef truoc bridge PLAY (startTrackPlayback/local/piano-roll), cancel STOP#2 retry khi loop restart; dedupe NOTE_OFF theo channel:pitch (pendingNoteOffMap + scheduleNoteOff) de NOTE_OFF tre (dur+30ms) khong cat note-on cung pitch ke tiep (bar lien nhau, piano roll note chong), clear map khi stop; sync 5 ban JS + index.html ?v=202608181807, rebuild exe release
2026-08-18 18:45:31 +07:00
3dtours
6b6328044c
docs(win): mark all 6 Windows lossless-audio tasks complete (192.168.1.24)
2026-08-18 17:53:23 +07:00
3dtours
df0fcbed8a
build(win): rebuild sonicforge-daw.exe (Tauri bundle) — engine with lossless float32 pipeline
2026-08-18 17:52:22 +07:00
3dtours
161a380a60
build(win): bundle jpeg62.dll with bridge (FxGuiServer JPEG encode needs it at runtime)
2026-08-18 17:45:47 +07:00
3dtours
398ff21f0b
build(win): rebuild daw_vst_bridge.exe - IEEE Float32 WAV render + header fix (lossless gate 9/9, offline render 9/9)
2026-08-18 17:37:46 +07:00
3dtours
50cfed3340
test(gate): accept fact/other chunks — validate data chunk ends at EOF
...
sf.write() float32 WAVs carry a fact chunk; strict 44+data_size check was
too narrow. Walk chunks instead; bridge header bug (half data_size) still
caught because its data chunk must run to EOF.
2026-08-18 17:36:56 +07:00
3dtours
ba9ceeea90
fix(bridge): WAV header data_size for IEEE float32 (was 16-bit byte count)
...
- finishWav call sites accumulated n*4 (stereo 16-bit) but float32 writer
emits n*8 bytes -> RIFF/data chunk sizes half the real value; players and
soundfile truncated renders to half length
- gate test now asserts file size == 44 + data_size to catch this
2026-08-18 17:35:54 +07:00
admin
351ee56080
fix(bridge): load dung VSTi theo track (V9) - bo early-return mui theo flag, load qua Tauri invoke khi co path, guard path sai (WaveObserver vs Nexus), chi mo GUI khi load OK; sync 6 ban JS + index.html ?v; kem cac fix bridge truoc (bugs 1-4, GUI restore)
2026-08-18 16:56:05 +07:00
admin
cbcc1f658c
merge: Normalize Linux audio pipeline to lossless Float32 ( a2f9313)
2026-08-18 12:10:24 +07:00
3dtours
a2f93138be
Normalize Linux audio pipeline to lossless Float32 (skill: lossless-audio-compliance)
...
- native bridge WAV writers: 16-bit PCM truncation -> IEEE Float32 (fmt 3, bit-exact)
- vendor sheredom_json.h (vst3sdk 3.8.1 lacks moduleinfo/json.h)
- Dockerfile: drop nonexistent sfizz tag v1.2.3
- Python sf.write -> subtype=FLOAT everywhere
- resample_poly -> kaiser(16) window (>=130dB stopband)
- audio_editor._write_wav_lossless(): FLOAT passthrough, TPDF dither only for
8/16/24-bit final exports
- app.jsx WAV encoders: Float32 default, TPDF dither for integer depths, fix 24-bit
- tests: lossless compliance gate (null test < -140dBFS, float32 format) 9/9 pass
- TASKS_WINDOWS_AUDIO_NORMALIZE.md: Windows-side remaining tasks
2026-08-18 11:50:26 +07:00
admin
308857c4a7
fix: VST GUI embed chup frame trang (Ozone 11 GPU) - luon chup ca BitBlt va PrintWindow PW_RENDERFULLCONTENT, chon frame chi tiet hon; fix loi JPEG chi ghi hang dau tien
2026-08-18 09:56:53 +07:00
admin
4eadf897a4
feat(mastering): remove redundant VST FX MASTERBUS row from panel
...
VSTs are now added via the chain '+' button (addVstToChain mirrors into
vstFxChain for offline render), so the old bottom row (slot list + '+
Thêm VST FX...' select + offline preview) duplicated the chain and is
removed.
2026-08-18 09:43:30 +07:00
admin
c9b35d60ff
fix(mastering): VST chain edits no longer reverted by cross-device temp sync
...
Guard the 3s applyRemote sync so it does not clobber masteringSettings
while the Mastering panel is open (user actively editing chain). Another
connected session's temp snapshot (written every 30s) was reverting
chain add/remove/toggle of VST modules within ~3s.
2026-08-18 09:36:24 +07:00
admin
569be72110
fix(native_bridge): strip query string in fx-gui HTTP path + walkthrough notes
...
- readRequest now trims '?t=<ms>' cache-buster so /frame?t=... matches
/frame route (frontend VstGuiEmbed polls with timestamp → was 404, no image)
- document: jpeg62.dll manual copy, add auto-opens GUI (already_running
expected), reopen needs bridge exit wait
2026-08-18 08:27:35 +07:00
3dtours
c382afe2a6
feat: embed native VST GUI in mastering + fx rack panels (bridge --fx-gui frame capture + input relay)
...
Linux parts (0L1-4L1 per TASKS_LINUX_WINDOWS.md):
- native_bridge: FxGuiServer.cpp HTTP server (Winsock) — /frame BitBlt +
PrintWindow fallback -> JPEG (libjpeg-turbo q70), /input PostMessage relay
(mouse/wheel/key, coords scaled), /close, /ping; RenderFxJob fxGuiSetup +
run_fx_gui_server (offscreen); main.cpp --fx-gui dispatch; vcpkg +
CMakeLists WIN32-only + JPEG.
- api: open_fx_gui embed flag spawn --fx-gui, parse SF_FXGUI_PORT -> embed_url,
fx-gui/close endpoint; 4 unit tests.
- ui: VstGuiEmbed component (frame refresh 100ms, ping 2s, input relay,
scale coords) shared by MasteringModal + FXRackModal; swap graph<->GUI,
cleanup on unmount, dead-bridge toast fallback.
- docs: TASKS_LINUX_WINDOWS.md, WALKTHROUGH_WINDOWS.md, PLAN status.
Windows tasks 0W1-4W1 remain (build + E2E real VST).
2026-08-17 22:37:55 +07:00