Service both VST3 parameter channels, and promote pitch key-track and Trigger length so all 44 ids issue
The SDK's own single-component sample drains inputParameterChanges in process() and implements setParamNormalized; automation was reading the GUI channel alone. The audio thread now patches a block it solely owns.
This commit is contained in:
@@ -49,9 +49,10 @@ static void testEveryDeckControlIsClassifiedIntoOneOfTheThreeCommitTiers() {
|
||||
|
||||
// The note-on-latched tier: published like a live control, read only at note-on. Asserted as
|
||||
// its OWN state rather than as "not Reload" — the whole point of widening the predicate is
|
||||
// that Rate must not fall back into either neighbour, and Γ-W4-T1 reads this classification
|
||||
// to decide what it exposes to the host.
|
||||
const DeckParam latched[] = {DeckParam::kRate};
|
||||
// that none of these falls back into either neighbour, and the VST3 parameter surface reads
|
||||
// this classification to decide what it exposes to the host.
|
||||
const DeckParam latched[] = {DeckParam::kRate, DeckParam::kKeyTrack,
|
||||
DeckParam::kTrigLength};
|
||||
for (DeckParam p : latched) CHECK(deckParamCommit(p) == LiveCommit::NoteOnLatched);
|
||||
|
||||
// Everything else reloads or rebuilds; deck_groups.h is the home for why each exclusion
|
||||
@@ -60,7 +61,6 @@ static void testEveryDeckControlIsClassifiedIntoOneOfTheThreeCommitTiers() {
|
||||
DeckParam::kPlayMode, DeckParam::kPitchEngine, DeckParam::kPitchEnvEnable,
|
||||
DeckParam::kFilterEnable, DeckParam::kFilterLaw,
|
||||
DeckParam::kAmpVelCurve, DeckParam::kPitchVelCurve, DeckParam::kFilterVelCurve,
|
||||
DeckParam::kKeyTrack, DeckParam::kTrigLength,
|
||||
DeckParam::kAmpEnvSelect, DeckParam::kPitchEnvSelect, DeckParam::kFilterEnvSelect,
|
||||
DeckParam::kAmpEnvMode, DeckParam::kPitchEnvMode, DeckParam::kFilterEnvMode,
|
||||
DeckParam::kVoiceCount, DeckParam::kVoiceMode,
|
||||
@@ -99,7 +99,10 @@ static void testOnlyALiveControlsDragTakesTheLiveTier() {
|
||||
// Rate keeps its own tier through the drag site: it must not arrive as Live (which would let
|
||||
// it move a sounding note) nor as Reload (which would re-decode the WAV under a swept knob).
|
||||
CHECK(knob(DeckParam::kRate) == LiveCommit::NoteOnLatched);
|
||||
CHECK(knob(DeckParam::kTrigLength) == LiveCommit::Reload);
|
||||
// Trigger length resolves playEnd_ and key-track the pitch ratio — both facts a voice fixes
|
||||
// at note-on, which is the latched tier's own definition rather than the reload tier's.
|
||||
CHECK(knob(DeckParam::kTrigLength) == LiveCommit::NoteOnLatched);
|
||||
CHECK(knob(DeckParam::kKeyTrack) == LiveCommit::NoteOnLatched);
|
||||
// Master gain is Live and reaches the audio BESIDE the live block rather than through it —
|
||||
// one atomic the audio thread applies as a post-sum multiply. Classifying it Reload would
|
||||
// claim a gain move re-decodes the WAV, which it never did.
|
||||
|
||||
Reference in New Issue
Block a user