Report the instrument's automatable parameters to the host under a frozen id table, in signal-flow order, with real units

42 of 44 ids issued: pitch key-track and Trigger length stay reserved
pending a live path. Master gain reclassified Live — it never reloaded.
This commit is contained in:
2026-08-02 15:14:16 -04:00
parent c7afa3a80f
commit bfaa0f2614
38 changed files with 1742 additions and 218 deletions
+14 -2
View File
@@ -125,6 +125,12 @@ bool ReaSamplerEditor::mouseDownDeck(const FaceLayout& fl, int x, int y) {
dragStartParams_ = params_;
dragStartX_ = x;
dragStartY_ = y;
// Opens the host's edit bracket for the whole gesture, so a host in touch or latch mode
// records one continuous edit rather than a burst of one-point ones. Closed on release
// and on capture-lost; a control with no parameter row is a no-op inside the processor.
if (processor_) {
processor_->beginParamGesture(static_cast<instrument::ui::DeckParam>(dragParamId_));
}
invalidate();
}
// The deck band swallows its own clicks either way — no fall-through to the waveform.
@@ -188,8 +194,14 @@ void ReaSamplerEditor::dragDeck(int x, int y) {
}
applyDeckKnob(dragParamId_, norm);
// A live control is delivered on every move, not only on release — that is the whole
// point: the note already sounding tracks the hand on the knob.
if (dragCommitsLive(DragKind::kDeckKnob, dragParamId_)) commitLive();
// point: the note already sounding tracks the hand on the knob. The processor-side knobs
// are skipped because applyDeckKnob already wrote them straight through; commitLive would
// only re-push an unchanged parameter set. The release and capture-lost paths ask this same
// question; the reset path never reaches the commit for them at all.
if (!deckKnobIsProcessorSide(dragParamId_) &&
dragCommitsLive(DragKind::kDeckKnob, dragParamId_)) {
commitLive();
}
invalidate();
}