docs: record GA DAW-fix pass (Preserve SOLA, voice declick, stereo bus-pin+v9, .vstpreset drop-fx, drag-out, panel toggle); correct stale vst_chunk mechanism
This commit is contained in:
+15
-28
@@ -1813,32 +1813,19 @@ below.
|
||||
**Symptom (Daniel):** dropping a capture onto a track's FX chain does not instantiate + init
|
||||
ReaSampler 9000 — the audio-to-arrange drop works, but the "instrument init never fires."
|
||||
|
||||
**SDK sweep (done this pass — no false ceiling asserted):** the S17 drop-to-FX machinery is
|
||||
**present and SDK-correct**. `src/instrument_drop_win.cpp` calls `TrackFX_AddByName(track,
|
||||
"VST3:" + vstPluginName(), /*recFX*/false, /*instantiate*/-1)` then injects component state via
|
||||
`TrackFX_SetNamedConfigParm(track, fx, "vst_chunk", <base64>)`; both signatures + semantics are
|
||||
**verified present** in `reaper_plugin_functions.h` (the `VST3:` prefix, negative-instantiate =
|
||||
always-new, and the `vst_chunk` base64 write-parm are all documented). The gesture is wired
|
||||
(`src/bank_panel.cpp`: `decideGesture` → `InstrumentDrop` → on release `buildInstrumentDropChunk`
|
||||
→ `performInstrumentDrop`), FX-hotspot detection uses `GetThingFromPoint` (`fx_*` prefix), and the
|
||||
factory registers `kInstrumentSynthSampler` correctly. **So the platform CAN do this — the
|
||||
capability is not in question; the wiring is present.** This is therefore a **runtime diagnosis
|
||||
task, not a design decision or a platform-ceiling problem.** The likely fault domains for
|
||||
staff-engineer to investigate (in order):
|
||||
1. **FX-name resolution:** whether REAPER's scanned name for the plugin exactly matches `"VST3:" +
|
||||
vstPluginName()` (a display-name/scan-name mismatch would make `TrackFX_AddByName` return −1).
|
||||
2. **The gesture reaching `performInstrumentDrop`:** whether `decideGesture` actually resolves
|
||||
`InstrumentDrop` over an FX button (vs. falling through to `OsDrag`, which produces exactly the
|
||||
observed "drops as audio into arrange" symptom) — check the `overFxHotspot`/`GetThingFromPoint`
|
||||
path and the single-capture arming guard.
|
||||
3. **The `vst_chunk` write / blob format:** whether `TrackFX_SetNamedConfigParm` returns true and
|
||||
the injected blob matches what `setState` accepts (a format drift would create-then-play-nothing
|
||||
rather than fail to instantiate).
|
||||
|
||||
**Routing:** flagged for **staff-engineer** as a bug diagnosis. No product fork; no redesign
|
||||
gates on it, but it is a **functional prerequisite** for the drop-to-FX gesture to feel finished.
|
||||
**RESOLVED (GA post-launch DAW-fix pass, 2026-07-28).** The root cause was the injection
|
||||
mechanism, not the gesture wiring: `TrackFX_SetNamedConfigParm(..., "vst_chunk", <base64>)`
|
||||
is silently unappliable for VST3 — REAPER's VST3 wrapper cannot apply unframed raw component-state
|
||||
bytes there (the write parm returns true but the instance stays at defaults). The fix:
|
||||
`instrument_drop` builds a Steinberg-format `.vstpreset` file image (header + 'Comp' chunk =
|
||||
serialized component state, class ID from `reasampler_uid.h`); `instrument_drop_win` writes a
|
||||
transient temp file and applies it via `TrackFX_SetPreset(track, fx, path)`, which the SDK
|
||||
documents as accepting full `.vstpreset` paths for VST3 plug-ins. FX hotspot prefix-set extended
|
||||
to `tcp.fx*`/`mcp.fx*`/`fx_*` (embed strip tokens excluded). `reasampler_uid.h` split out of
|
||||
`reasampler_vst.h` as an SDK-free header so `instrument_drop` (pure module) can derive the
|
||||
class-ID hex string without the VST3 SDK.
|
||||
**Verify in DAW:** drag a capture onto a track's FX button → a ReaSampler 9000 instance appears on
|
||||
that track already playing that capture (one Ctrl-Z removes it).
|
||||
that track already playing that capture (one Ctrl-Z removes it). **VERIFIED.**
|
||||
|
||||
### Engineering prerequisite 2 — default window size for 1080p (routed to implementation)
|
||||
|
||||
@@ -1919,9 +1906,9 @@ preview velocity **persists** via envelope-v6 `ComponentState`; the envelope ove
|
||||
- **Editor size mechanism** — `getSize`/`setRect`/`checkSizeConstraint`/`onSize`/`canResize`
|
||||
**verified present** in `vendor/vst3sdk/public.sdk/source/common/pluginview.h`; confirm the exact
|
||||
min-size enforcement point (`checkSizeConstraint`) behaves under REAPER's host at build.
|
||||
- **Drop-to-FX** — `TrackFX_AddByName` / `TrackFX_SetNamedConfigParm` / `GetThingFromPoint` all
|
||||
**verified present** in `reaper_plugin_functions.h`; the remaining work is **runtime diagnosis**
|
||||
(name match, gesture routing, blob format), not an SDK question.
|
||||
- **Drop-to-FX** — `TrackFX_AddByName` / `TrackFX_SetPreset` / `GetThingFromPoint` all
|
||||
**verified present** in `reaper_plugin_functions.h`; injection via `TrackFX_SetPreset` +
|
||||
`.vstpreset` image (not `vst_chunk`) — **RESOLVED, GA DAW-fix pass 2026-07-28.**
|
||||
- **Preview note through the voice engine off-thread** — confirm the existing `commitAndReload`
|
||||
/ off-thread reload idiom is the right seam to fire a one-shot preview note without touching
|
||||
`process` on the UI thread; no torn state on the atomic voice-engine pointer.
|
||||
|
||||
Reference in New Issue
Block a user