Decouple the instrument reload from VST3 activation, and make the master meter's accumulate exact
This commit is contained in:
@@ -202,8 +202,8 @@ The consequence for this doc is concrete and it is a **subtraction from the para
|
||||
> latency, and the vendored SDK defines `restartComponent(kLatencyChanged)` as *"the host
|
||||
> has to deactivate and reactivate the plug-in"*
|
||||
> (`pluginterfaces/vst/ivsteditcontroller.h:105-108`). In this plugin a deactivate frees
|
||||
> every sounding voice and a reactivate re-decodes the WAV. **An automation lane toggling
|
||||
> that parameter would deactivate the plugin on every flip.**
|
||||
> every sounding voice. **An automation lane toggling that parameter would deactivate the
|
||||
> plugin on every flip.**
|
||||
|
||||
Two corollaries the parameter work must carry rather than rediscover:
|
||||
|
||||
@@ -211,7 +211,7 @@ Two corollaries the parameter work must carry rather than rediscover:
|
||||
binding it to `kIsBypass` would hand the host a control that restarts the component.
|
||||
- **Latency reporting must be derived from persisted state, not from a transient.** The SDK
|
||||
states the new latency is what `getLatencySamples` returns *after* `setActive(true)` — and
|
||||
this plugin's `setActive(false)` frees essentially everything. Whatever holds the limiter
|
||||
this plugin's `setActive(false)` destroys the whole voice state. Whatever holds the limiter
|
||||
flag must survive that cycle.
|
||||
|
||||
Full reasoning, the SDK quotes, and the required verification steps are in
|
||||
@@ -221,12 +221,13 @@ There is no constant-reported-latency fallback — that option is closed, not sh
|
||||
**this section does not shrink to a footnote and the limiter enable does not become
|
||||
automatable.** Plan against the not-automatable classification; it is settled.
|
||||
|
||||
**One future condition could reopen it, and it is worth knowing about.** The restart is only
|
||||
expensive because *this plugin's* `setActive(true)` re-decodes the WAV — not because the SDK
|
||||
requires it. `docs/TODO.md` ("Decouple the instrument reload from VST3 activation") files that
|
||||
reduction, and **"the limiter enable is wanted automatable" is one of its named trigger
|
||||
conditions.** If the parameter work genuinely needs that lane, the answer is to do the
|
||||
decoupling first, not to re-litigate the classification.
|
||||
**The decoupling that was filed against this section has LANDED (Γ-W3), and it changes the
|
||||
cost but not the classification.** `setActive(true)` no longer re-decodes the WAV: the decoded
|
||||
sample now survives a deactivate and only the voice state is rebuilt
|
||||
(`instrument-control-surface.md` §7.11). So a flip costs a voice rebuild rather than a disk
|
||||
read plus a decode — but **the deactivate still frees every sounding voice**, which is the
|
||||
ground the not-automatable classification actually rests on. Plan against not-automatable; if
|
||||
the parameter work wants that lane, the question to answer is the voice cut, not the decode.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user