Commit Graph

102 Commits

Author SHA1 Message Date
admin 6cbdbd8e9c G3: 1 clock - PDC latency that + playhead engine-derived 2026-08-28 15:51:19 +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 fa61712ecc V42+V42A: fix seam click khi loop master FX — worklet wrap crossfade (tail->head) + native WebAudio loop cho bypass (het click beat 0); dip bypass 5ms; PDC playhead freeze/snap 2026-08-28 11:35:32 +07:00
admin f38e500326 V24: fix master-chain crackle, 1s lag, solo bypass
- worklet: FILL 48->24 (PDC 7936 dung), flush protocol khi resume sau interruption
  (clear queue + fade-in/crossfade chi voi block moi), drop block stale
- engine fx_realtime: _flush_input_locked NO-DROP (ring day -> giu pending, cap 2048),
  flush_all() dong bo in/out khi worklet resume
- app.jsx: WS flush_done + flushing guard, fallback timer 500ms
- plugins.py: xu ly {cmd:flush} -> flush_done
- index.html: bump v param
2026-08-26 20:15:13 +07:00
admin a0f5f98209 v16b: revert EXPRESSION_CC 7 -> 11 (test CC7 xong, ve CC11 expression) 2026-08-26 17:04:31 +07:00
admin e54dec4010 Fix: persist expression_curve qua project save/load; TEST CC7 thay CC11 2026-08-26 16:29:54 +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 26086cb331 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.
2026-08-25 21:33:33 +07:00
admin 57fa2e78fe fix(export): carry bridge-captured VSTi preset into offline render
Offline render tao bridge moi khong co preset -> plugin load init patch
-> am khac realtime (user tuong fallback). Gio doc presetBase64 tu
bridge_state.json (channel == track.id, plugin_path khop basename) va
truyen vao render_offline khi track khong nhung preset_data.
2026-08-25 21:14:48 +07:00
admin ae7299d097 fix(render): GM-only track (instrumentProgram, khong soundfont_id) render qua default SF2 thay vi oscillator synth 2026-08-25 19:48:07 +07:00
admin 6cee46d82a fix: SF render bridge-first (không fallback synth qua pyfluidsynth gain nhỏ) 2026-08-25 12:01:17 +07:00
admin ebf0828c55 fix(render): offline SF fallback tìm font GM có sẵn trong plugin_dirs user (Windows) 2026-08-25 09:45:08 +07:00
admin 51d948fdc9 fix(render): resolve VSTi offline qua plugin_dirs user + plugin_path schema
_resolve_instrument dùng PluginManager() chỉ scan VST_DIR mặc định -> VSTi
trong thư mục user (vd Steinberg\VSTPlugins\DUNE 3.dll) 404 -> render_engine
fallback oscillator synth -> bounce sai tiếng. Dùng get_plugin_manager()
(gộp plugin_dirs user) + resolve_plugin_path (lưới an toàn, chặn ext lạ).
render_offline nhận plugin_path từ schema synth_engine.plugin_path ưu tiên.
2026-08-25 09:24:55 +07:00
admin 2b7c7cef2c Fix export WAV khong mo duoc: default 32-bit float -> PCM 16 (client + server render + plugins.py) 2026-08-24 19:58:44 +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 36aa15e2eb chore(engine): FXRT_BRIDGE_LOG diagnostic stderr bridge vao file 2026-08-24 12:25:14 +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 708e7de32b fix(audio): offline mix limiter -3dBFS, 2-stage normalize (-14 LUFS + hard peak -1 dBTP), OGG export 2026-08-24 09:10:00 +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 9bb9a234b0 feat(rt+auth): batched input publish boi so 4 (het crackle) + auto-login loopback khong can mat khau
- fx_realtime: write_input gom FXRT_IN_SLOTS(4) frame vao _in_pending, flush
  ghi 1 lan + h.in_write += n (publish atomic -> bridge take=4 luon, het deficit)
- plugins pump: flush_input_stale(0.004) dau vong lap -> input le khong ket
- auth: _is_loopback(127.*/::1/localhost) -> get_current_user khong token = admin
  tu DB (must_change_password=False); POST /auth/local auto-login loopback, LAN 403
- ws fx-realtime: loopback khong token cho phep, remote thieu token -> close 4401
- UI: checkAuthStatus khong savedToken -> thu localLogin, thanh cong vao DAW,
  that bai -> modal login nhu cu; cache-buster v=202608212400
2026-08-23 12:00:05 +07:00
admin 1d4ff1282b Gap 13: BWF/INFO metadata cho WAV export — wav_bwf.patch_bwf_metadata chen bext + LIST/INFO (INAM/IART/ISRC/ICMT) truoc data chunk, giu nguyen PCM bits; render_project(metadata=) + RenderRequest.metadata + cloud render task; ExportModal Title/Artist/ISRC; test_66 (178 passed) 2026-08-23 09:11:18 +07:00
admin 94a0bc7401 Gap 7: master volume automation lane — render_engine automation.volume_db (dB interp -30..+3 sau fader truoc normalize), schema master.automation, UI AUTOM panel MasterStripConsole + realtime scheduling tren masterBus.output.gain (play/seek/stop), serialize/parse, test_65 (177 passed) 2026-08-23 09:05:39 +07:00
admin 2b5f396133 Gap 12: soundfont render qua native bridge — render_soundfont_offline (FluidSynth C API) thay pyfluidsynth khi thiếu lib; render_engine soundfont branch fallback bridge (test_64, 176 passed) 2026-08-23 08:52:57 +07:00
admin 3ad379f0ba Gap 10: multiband compressor + de-esser (LR4 crossover, UI, test_62) 2026-08-23 08:25:07 +07:00
admin 5d37c0683b D3+D4: export stage PCM16/24 + TPDF dither + noise shaping, resample 44.1/48/96k, normalize -1dBTP/-14LUFS, mono side/mid check; Export modal mastering options + /plugins/render options (test 9 case, 23 passed) 2026-08-23 07:47:27 +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 fe82b19557 D1: LUFS EBU R128 + true peak sau render (app/core/loudness.py), API /plugins/render tra them lufs/true_peak_db, test 4 cases 2026-08-22 21:50:29 +07:00
admin 2a5e2af04a master strip: L/R volume + LINK + MUTE that, bo soloBtn 2026-08-22 21:41:54 +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 fd790c1dc6 feat(fx): Phase 1 DAW chain hop nhat — fx_realtime chain JSON giu thu tu, SET_PARAM/REPORT_LATENCY qua WS text, native_render chain builtin+vst3 xen ke, pytest 2026-08-22 19:26:43 +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 14265515aa fix(exit): taskkill rieng tung process — kill het plugin_host/fx_vst_bridge khi thoat app (truoc day /IM gop chi chay lenh dau); CREATE_NO_WINDOW cho moi subprocess engine (het terminal chớp chớp) 2026-08-22 18:06:26 +07:00
3dtours 9c6e200708 fix(plugin-dirs): remove het dir - rescan khong con VST trong thu muc mac dinh (authoritative user dirs, khong fallback default khi da luu rong; list_scan_all/_scan_plugins chi scan dir user khai) 2026-08-22 15:29:31 +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 aaf97b1255 fix(available): bo qua .dll trong thu muc da co .vst3 (iZotope installs .vst3 + module .dll cung thu muc) — FX khong con lot vao nut Synth (3/3) 2026-08-22 03:57:14 +00:00
3dtours a09a30c79d fix(available): _scan_plugins bo qua file .dll ben trong folder .vst3 — FX Ozone/Neutron khong con lot vao nut Synth (2/2, dong bo _scan_vst_in_dirs) 2026-08-22 03:49:03 +00:00
3dtours 34d43f5018 fix(fx-list): MASTERING PANEL khong hien thi VST FX da scan trong Plugin Manager (cache _fx_scan_all ket [] vinh vien)
- vst_engine: list_scan_all cache co TTL 300s (FX_SCAN_TTL) + chi cache khi
  find_fx_bridge_exe() co exe (thieu bridge -> tra [] NHUNG khong cache de
  lan sau thu lai) — truoc day ket [] vi mui gio, MASTERING PANEL rong.
- vst_engine: them invalidate_fx_scan() clear cache scan VST.
- plugins.py: POST /scan (Plugin Manager Scan) goi _invalidate_fx_scan_cache()
  -> MASTERING PANEL lan mo ke tiep quet lai voi dirs moi; response them
  fx_cache_invalidated.
- app.jsx: MasteringModal/FXRackModal load listFx() lai moi lan mo modal
  (deps [isOpen]/[track.id]) + loading state; VstPluginPicker nhan prop
  loading -> hien 'Dang quet VST FX...' thay vi 'Khong co VST FX'.
- precompiled rebuild (LF) + index.html ?v=202608220330; dist sync.
- tests: +4 test cache TTL/invalidate/no-bridge (TestFxScanCache).
2026-08-22 03:34:33 +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 67245a6f61 fix(fx-list): UNKNOWN entries (Ozone treo scan) van vao list_fx de MASTERING PANEL khong mat plugin; nut Synth loai qua is_unknown 2026-08-22 02:00:48 +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
admin bb6658e03d fix(fx): realtime VST ngắt quãng khi mở MASTERING PANEL + PWR master không ảnh hưởng âm; pacing WS input/output, gate fxRt theo masterConnected, worklet cap 32 2026-08-21 21:48:56 +07:00
admin d7756b08ab fix(bridge): đồng đều âm lượng VSTi jbridge, GUI native lên top, modal instrument lọc FX
- calibrate: probe sandbox (jbridge) theo real-time pacing — child render qua SHM
  consumer-sync, probe µs-speed chỉ đo được silence/attack → makeup=1.0 mọi channel.
  Thêm virtual probeNeedsRealtime() (SandboxVst2Host → true), calibrate() Sleep
  ~1 block/5.8ms để child kịp nhận MIDI + render steady-state → makeup đo peak thật
  (3 channel Qin ≈ 2.6, trước đây = 1.0 → âm lượng đồng đều giữa các track/VSTi).
- OPEN_GUI: SetWindowPos(HWND_TOPMOST) + SetForegroundWindow + BringWindowToTop
  → GUI VSTi hiển thị ở top window, tương tác ngay.
- /api/v1/plugins/available: filter vst_instruments + extra theo is_fx của
  fx_vst_bridge --scan (trước merge entry) — modal Select Instrument chỉ còn
  soundfont + VSTi, không hiện VST FX (90 → 33).
2026-08-21 10:18:25 +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 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 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
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 b261eb0d7e feat: VST FX rack per-track + masterbus render via native_bridge 2026-08-17 21:31:57 +07:00