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
+13 -2
View File
@@ -256,6 +256,13 @@ private:
// liveCommitFor (deck_groups.h) for why.
bool dragCommitsLive(DragKind kind, int paramId = -1) const;
// The deck knobs whose value lives on the processor or on the editor rather than in the
// parameter set: the preview-velocity sentinel, voice count, master gain. applyDeckKnob
// writes each straight through, so params_ is not a rollback target for them and
// commitLive has nothing of theirs to push. Every drag path that ends a gesture — release,
// reset, capture-lost, per-move — asks this same question.
static bool deckKnobIsProcessorSide(int paramId);
// Commits `id` as the loaded capture. The one parameter set carries over — it governs
// whatever is loaded, so a load swaps the sound, not the settings.
void loadSelection(const std::string& id);
@@ -398,8 +405,12 @@ private:
// params edit, no reload).
void applyDeckKnob(int id, double norm);
// The knob's live value label shown during hover/drag: milliseconds, percents, Hz, signed
// semitones, a curve exponent, a voice count, or the master-gain dB.
// The knob's value in the REAL unit the host is told about (core/instrument/param).
double deckPlainValue(int id) const;
// The knob's live value label shown during hover/drag: the ONE per-category formatter's
// digits plus this surface's own static chrome (the unit suffix, a curve dial's caret).
// Empty for a control with no plain-value layer.
std::string deckValueLabel(int id) const;
ReaSamplerProcessor* processor_ = nullptr;