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
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
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
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
2ad833fbe7
fix(masterfx): merge captured preset vao realtime chain
2026-08-23 16:47:35 +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
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
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
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
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
admin
e22757d5be
fix(mastering): master dry mac dinh — built-in modules tat khi khoi tao
...
- App default + 2 fallback (ProfileModal, load project): eqActive/
imagerActive/maximizerActive = false (truoc day chain rong nhung cac
flag van true -> Imager+Maximizer van xu ly am mac du MASTERING PANEL
trong)
- applyMasteringSettings doc flag truc tiep, khong check chain — user
phai them module trong MASTERING PANEL moi bat built-in processing
- bump cache-bust app.precompiled.js -> 202608212330
2026-08-22 16:27:57 +07:00
admin
edc647ded6
fix(rt): restart fxRt khi chain VST doi trong luc realtime dang chay
...
- masteringSettings effect goi fxRtStart() khong dieu kien: early-return
khi active + cung chainKey, stop+start lai khi chain doi (insert/remove/
bypass/reorder VST trong MASTER FX CHAIN) — truoc day nhanh chainKey
chet vi branch chi chay khi !fxRt.active
- test list_scan_all: path plugin phai ton tai tren dia (loc entry chet
truoc cache); dung _scan_json helper voi file that trong tmp_path
- bump cache-bust app.precompiled.js -> 202608212300
2026-08-22 16:13:10 +07:00
3dtours
d74ccdaa8d
fix(mastering): empty chain by default, allow removing all modules
...
MASTERING PANEL auto-seeded 3 modules (Dynamic EQ/Imager/Maximizer) and
removeChainModule re-added them when the chain hit zero. Chain now starts
empty everywhere (init, restore fallback, migration, graph fallback) and
can be removed down to empty; activeModule guards empty chain (null).
Cache-bust precompiled.js ?v= bump.
2026-08-22 15:58:39 +07: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
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
a667d0354f
feat(chords): thêm Chords Panel — chordTheory service + presets/custom/AI tab, insert progression vào timeline, Shift+K/menu/toolbar
2026-08-21 12:35:20 +07:00
admin
ec85e7d1a9
Phase 5: Virtual MIDI Keyboard (F2/menu Tools) — QWERTY mapping spec §3, note routing theo attachMidiHandler (bridge/native SF-VST/SonicSF/Carla), live record forward, drag+persist localStorage, verify Playwright + 3 regression PASS
2026-08-21 12:16:03 +07:00
admin
5fc45a59f8
Phase 3: gộp builtin DSP + VST FX thành 1 FX CHAIN (track + master), đổi tên panel/nút/menu, fix lookup track cho nút FX TCP
2026-08-21 11:36:48 +07:00
admin
2c93c701ce
feat(export): Export Mix loop không fade (checkbox + cắt buffer client) + server download thay blob (WebView2 chặn)
2026-08-21 11:25:49 +07:00
admin
96da8b5ac0
fix(export): MIDI export qua server endpoint thay blob download (WebView2 chặn) + velocity 1..127, bỏ rest-track
2026-08-21 11:10:32 +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
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
0cf771242f
VST FX integration: plugin picker theo category + GUI embed fill viewport (FX Rack & Mastering)
2026-08-19 07:55:57 +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
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
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
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
8fbacd1d2b
fix(tcp): open VSTi GUI via bridge API on LAN browser; scale vol/pan ruler wheel by deltaY
2026-08-17 20:44:44 +07:00
admin
bbde74f1a7
fix: normalize peak audio render offline chống clip polyphony; TCP wheel điều chỉnh volume/pan
2026-08-17 20:04:34 +07:00
admin
cead8c8c71
fix(vsti): crackle fix P1-P3 — SHM 8-slot ring + drain-delta pump + AudioWorklet sink
...
- SharedMemoryIPC.h/main.cpp: render into ring slot (idx & ringMask), 8 slots
- shm.rs: ring fields + read_ring_audio; lib.rs pump drains FULL delta, not just latest
- bridgeAudioNode.js: AudioWorklet primary (bridge-audio-sink), ScriptProcessor fallback
- bridgeAudioWorklet.js: ring 64 blocks, underrun fade, overrun drop + crossfade
- layout tests: sizeof 27560 (8-align via u64)
2026-08-16 20:43:50 +07:00
admin
ed26e1706d
fix(latency): threadpool renders + RENDER_LOCK + client pre-render cache
2026-08-16 20:21:48 +07:00
admin
90b5a63719
Bump frontend cache-buster to 202608141031
2026-08-16 19:11:15 +07:00