Files
SonicForgeStudio/G2_RESULTS.md
T

37 lines
2.0 KiB
Markdown

# G2 — JUCE VST3 hosting + latency thật (FxLatReport)
Trạng thái: **DONE** — đã verify qua probe, build pass.
## Thay đổi
- `native_bridge/juce_fx/JuceFxEngine.cpp` — `setChain(chainJson)`: parse mảng fx_chain
(`sheredom_json.h`), load VST3 qua `juce::VST3PluginFormat::findAllTypesForFile` +
`createInstanceFromDescription`; preset_b64 → `setStateFromVSTPresetFile` (deprecated,
vẫn dùng được); nối node nối tiếp in→p0→…→out; sau `prepareToPlay`:
`slotLatencies[i] = getLatencySamples()` từng plugin, `totalLatency = graph.getLatencySamples()`.
`entryLatencies()` trả `std::vector<uint32_t>` theo thứ tự slot (skip/bypass/fail = 0).
- `JuceFxEngine.h` — khai báo `struct Slot;` + `setChain`/`entryLatencies`.
- `JuceFxLoop.cpp` — đọc `chainJson` từ job, gọi `engine.setChain` trước prepare;
`reportLatencies` báo từng slot qua FxLatReport (giữ giao thức cũ).
- `juce_fx/CMakeLists.txt` — bật `JUCE_PLUGINHOST_VST3=1` (JUCE mặc định 0 → class
VST3PluginFormat bị ẩn, gây C3861/C2039).
- `src-tauri/binaries/juce_fx_bridge-x86_64-pc-windows-msvc.exe` — build mới (G2).
## Verify (debug/g0_latency_probe.py, exe mới)
| config | plugin_latency | drained | recv/sent | roundtrip mean |
|---|---|---|---|---|
| empty chain | `{}` | True | 10000/10000 | 21.57 ms |
| pureComp | `{0: 2108}` | True | 10000/10000 | 21.70 ms |
| Ozone 11 | `{0: 0}` | True | 10000/10000 | 21.69 ms |
- Latency thật đúng dự đoán: pureComp ~2108 samples @48k, Ozone 11 không delay.
- Không crackle, drained=True, recv=sent — benchmark G1 giữ nguyên.
## Ghi chú
- `setStateFromVSTPresetFile` là API deprecated nhưng public (bên trong `#ifndef DOXYGEN`),
compile được với `JUCE_PLUGINHOST_VST3=1`.
- Bỏ hằng `(7+8)*256` trong `fxRtApplyPdc` (app.jsx) là việc của G3 (dùng latencyTotal
thật từ WS — hiện `FX_RT_ROUNDTRIP_SAMPLES=3840` là ước lượng RTT pipeline, ponytail).