instrument: narrow the live-param publish lock to its own mutex, off the reload's decode

Knob-drag publishes no longer block behind a full reload's WAV decode — a dedicated livePublishMutex_ replaces reloadMutex_ for the seqlock's single-writer contract. Also fixes an editor comment overclaim and two doc restatements.
This commit is contained in:
2026-07-30 21:54:20 -04:00
parent bbc7dc70bb
commit efd1e41f46
6 changed files with 26 additions and 21 deletions
+2 -7
View File
@@ -161,13 +161,8 @@ must live compute, latching the parameters at note on is not acceptable. long te
automatable parameters."* It rejects the precedent, not one instance of it.
- **Which controls are live is ONE decision, recorded in ONE place** — `isLiveDeckParam` and
`liveCommitFor` (`ui/deck_groups`), whose header is the home for why each excluded control is
excluded. Continuous playback controls go live: the six filter tone/modulation knobs, and
every stage time and stage level on all three envelopes. Everything else reloads or drops to
the voice-param rebuild. **FIVE continuous controls are outside the live set** — pitch
key-track, velocity→cutoff depth, and Trigger's %-length, fade-in and fade-out — so a
Trigger-mode instance gets no live delivery on its amplitude controls at all; only the filter
and pitch-envelope knobs move a sounding one-shot.
`liveCommitFor` (`ui/deck_groups`), whose header is THE home for which controls are live and
why each exclusion is excluded — see there rather than restating the list here.
- **Ownership sits ABOVE every snapshot.** `SampleData::live` is a NON-OWNING pointer to the one
block the shell owns per instance. The member-ordering constraint that enforces it, and why,
are recorded at `liveParams_` in `shell/instrument/reasampler_processor.h`. A drain voice