admin
51e62a1158
fix(ui): persist transport loop + panel mixer + redesign export modal (folder picker + default dir)
2026-08-24 17:47:40 +07:00
admin
09bc762218
fix(masterfx): xoa han panel Wave Observer khoi mastering modal - khong con hien sau khi dong GUI
2026-08-24 17:35:33 +07:00
admin
9c81d9c1fa
fix(masterfx): Wave Observer scope khong tu chay (toggle default TAT) + preset VST master giu sau save/load
2026-08-24 17:26:36 +07:00
admin
6ec249ef13
fix(fxrt): mirror sidecar exe clean build, probe toggle do latency thuc (Ozone) - cache HIT xac nhan khong reload khi toggle
2026-08-24 17:05:13 +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
9137e7e276
fix(fxrt): giu session realtime khi loop/seek/reschedule - het bypass+reload moi pass loop
...
- fxRtKeepForRestart flag: nhánh restart/resume (loop selection/project-end,
sub-tab loop, reschedule items, seek, solo toggle, piano-roll seek, export
rewind, unmute, playhead, tab-switch resume, ghost play) set flag truoc
stopAllPlayback -> giu session FX (fxRtStart early-return) -> khong reload
VST ~4s moi pass loop.
- User stop thật (fade=true), bridge-down, new project, recovery rebuild,
export end, offline export: khong set flag -> teardown nhu cu.
- Rebuild app.precompiled.js tu source (babel) + giu lai IIFE overlay telemetry.
- Bump cache-buster 202608242200 -> 202608242300 (5 ban).
2026-08-24 15:54:13 +07:00
admin
348079ceae
fix(fxrt): doc stats tu fxRt const global, khong phai window.fxRt
2026-08-24 15:40:49 +07:00
admin
69bb449958
feat(fxrt): hien thi telemetry stats tren UI (vi WebView2 khong mo devtools)
2026-08-24 15:35:16 +07:00
admin
559d52e3c5
fix(fxrt): bo pace setTimeout input, gui ngay theo dong ho audio worklet (het crackle sau 3-4s khi chain rong)
2026-08-24 15:28:41 +07:00
admin
5c7fc2c779
chore(probe): dong bo FILL/CAP 48/64 voi worklet
2026-08-24 15:20:26 +07:00
admin
c10d2c2f14
chore(engine): gui sess.stats kem latency frame (chan doan drop/publish session that)
2026-08-24 15:20:26 +07:00
admin
272382f73c
fix(fxrt): tang cushion worklet 128->256ms + telemetry underrun (giam crackle do main-thread stall)
2026-08-24 15:20:26 +07:00
admin
36aa15e2eb
chore(engine): FXRT_BRIDGE_LOG diagnostic stderr bridge vao file
2026-08-24 12:25:14 +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
09d8a386fb
fix(fxrt): resume sau long stall phai fade-in (het click), khong hold khi da im lang
2026-08-24 12:25:13 +07:00
admin
86d5bbc372
chore(probe): them param_burst kich thich set_param qua ctrl ring (FXRT_PROBE_PARAMS, FXRT_PROBE_PARAM_IDS)
2026-08-24 12:03:08 +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
b907db3251
chore(probe): theo doi clipping output (FXRT_PROBE_AMP + flat-top stats)
2026-08-24 11:39:49 +07:00
admin
5ca2027966
fix(fxrt): underrun xu ly o worklet (hold+fade), bo fade engine, fix wet bus
...
- sf-fx-realtime.js: underrun -> hold block cuoi (HOLD) roi fade-out 4 block ~21ms
gain 1->0 truoc khi im lang (het click cat cung khi main-thread stall chan ca
2 huong - engine khong the gui fade toi kip); resume giua fade -> fade-in nhanh
- plugins.py: bo fade-out/fade-in engine (den tre vo dung + fade-in sau stall tao
dip dinh ky = vibrato/wow&flutter), giu to_thread(time.sleep) poll 2ms
- app.jsx/precompiled/index.html: fix master wet bus (no dry lai) + latency const
FX_RT_ROUNDTRIP_SAMPLES + bump worklet cache-buster v=202608241800
- fxrt_ws_probe.py: consumer stall (mo hinh dung app that), WorkletSim holdfade mode
Probe consumer-stall (app that): light 5/5 hard click 0.245-0.285 -> hard=0;
heavy: recv=sent (het fade thua), hard=0
2026-08-24 11:19:56 +07:00
admin
3c9f1c5809
chore(probe): them fxrt probe diagnostics
...
- fxrt_probe.py: in-process bridge loopMax/jitter do
- fxrt_ws_probe.py: pipeline that (uvicorn :8011 + WS + worklet sim),
dem lost/silence/peak@silence, stalls heavy|light|none
2026-08-24 10:40:24 +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
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
2ad833fbe7
fix(masterfx): merge captured preset vao realtime chain
2026-08-23 16:47:35 +07:00
admin
6176cf3f8e
fix(auth): standalone auto-login qua IP LAN cua chinh may — _is_local_client (own interface IPs)
2026-08-23 15:40:49 +07:00
admin
6edfe1db32
fix(fx-rt): het crackle master FX - engine gui block ASAP + worklet FILL buffer 8
...
_pump_output bo pace realtime (truoc: moi block send cach nhau block_sec lam
client queue ~1 -> jitter bridge/WS/GC -> queue can -> zero-fill crackle).
Gio gui het burst ASAP; worklet sf-fx-realtime them FILL=8: chi phat khi
outQueue >= 8 block, underrun -> re-buffer (im lang cho du FILL) thay vi
zero-fill lien tuc. Cap 32 giu nguyen. PDC: FX_RT_ROUNDTRIP_SAMPLES 1792->3840
(RTT ~7 block + FILL 8 block = 15 block @48k) de dry-bypass path khong lech
pha voi mastered. Cache-buster v=202608212401 (precompiled + worklet).
Rebuild PyInstaller + copy 3 noi deploy. Verify: probe crackle3 25s Ozone
rebuffer_events=0 (zero_fill 12 block = startup fill), picker UI PASS (59 VST).
2026-08-23 12:50:11 +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
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
bec82a20bc
Cache-buster app.precompiled.js -> v=202608212359 (fix deserialize vstBypass)
2026-08-23 10:44:33 +07:00
admin
a105bdb959
Fix: master FX chain khong xu ly sau khi load project — deserialize composite master.bypass thanh vstBypass=true loai het VST3 khoi fxRtChain (chain=[] → fxRtStart early-return → masterBus pass-through, offline export cung tat). Deserializer gio hardcode vstBypass=false (khong co UI nao set flag nay cho master; chi ton tai tu bug deserialize). Build lai app.precompiled.js + copy 3 ban deploy + cache-buster moi. Verify UI: LOADED vstBypass=false, chain VST3 Ozone giu, fxRtChainLen=1; play → fxRt.active=true ws OPEN inQueue=64; DB save moi master.bypass=false.
2026-08-23 10:44:28 +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
6b2c9a039b
Gap 8: PDC realtime — WS latency push + dry-path delay compensation
...
Backend: /ws/fx-realtime pump drain get_latencies (SHM ring, bridge da bao REPORT_LATENCY) -> push {cmd:'latency',total,latencies} khi tong doi. Frontend: pdcDelay (DelayNode) giua dryOutput->output bu delay master chain (round-trip 2 block + latency VST3), fxRtApplyPdc cap nhat tu WS frame, reset khi chain off. Test test_63 fake session 1024 -> frame total 1024; full 175 passed.
2026-08-23 08:44:54 +07:00
admin
db12698ba2
Gap 11: A/B reference track — /reference-analyze LUFS/dBTP/centroid + RefCompareModal A/B listen (5 test, 174 passed)
2026-08-23 08:34:09 +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
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
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
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
4ae2f06c57
Review DAW-standard R1-R8: cài đặt thực tế qua render_project + API /render — track chain order (vst3 giữa), gain/pan sau chain, master chain trên mix, gain staging, mono/stereo, smoke export
2026-08-22 21:13:11 +07:00
admin
11e564abc5
Phase 5.8: tick hoàn tất checklist DAW
2026-08-22 21:03:00 +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