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:
@@ -1,13 +1,14 @@
|
||||
// editor_controls.cpp — the ReaSamplerEditor's parameter plumbing: the band-stack layout
|
||||
// resolve every paint/hit-test path shares, the shell's half of the control-value binding (the
|
||||
// per-instance controls the parameter set does not carry — key-track, voice count, master gain,
|
||||
// preview velocity — plus the value labels), and the node-drag clamp bounds. The parameter-set
|
||||
// half is the pure `deck_values` module. The orthogonal half — which stored struct each editor
|
||||
// selection names — is editor_models. Value logic only: no painting, no window plumbing.
|
||||
// preview velocity — plus each knob's plain value and its label), and the node-drag clamp
|
||||
// bounds. The parameter-set half is the pure `deck_values` module. The orthogonal half — which
|
||||
// stored struct each editor selection names — is editor_models. Value logic only.
|
||||
|
||||
#include "shell/instrument/reasampler_editor.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cmath> // isfinite (the gain's -inf label)
|
||||
#include <cstdint>
|
||||
#include <cstdio> // snprintf (deck value labels)
|
||||
#include <string>
|
||||
@@ -241,11 +242,20 @@ std::string ReaSamplerEditor::deckValueLabel(int id) const {
|
||||
|
||||
// The digits come from the ONE formatter; everything the editor adds around them is static
|
||||
// chrome — a constant prefix or suffix cannot diverge from what the host shows.
|
||||
const double plain = deckPlainValue(id);
|
||||
char digits[24];
|
||||
instrument::param::formatPlainFor(deck, deckPlainValue(id), digits, sizeof(digits));
|
||||
instrument::param::formatPlainFor(deck, plain, digits, sizeof(digits));
|
||||
const auto kind = instrument::param::unitKindFor(deck);
|
||||
const char* caret =
|
||||
instrument::ui::deckParamUnit(deck) == instrument::ui::UnitCategory::Exponent ? "^" : "";
|
||||
return caret + std::string(digits) + instrument::param::unitStringFor(deck);
|
||||
// The gain at true silence reads "-inf", not "-infdB": there is no decibel value there.
|
||||
if (kind == instrument::param::UnitKind::Decibels && !std::isfinite(plain)) {
|
||||
return std::string(digits);
|
||||
}
|
||||
// The stage times are the one category that carries a space before its unit, and always did —
|
||||
// this surface's own typography, not the host's (ParameterInfo::units is the bare string).
|
||||
const char* gap = kind == instrument::param::UnitKind::Time ? " " : "";
|
||||
return caret + std::string(digits) + gap + instrument::param::unitStringFor(deck);
|
||||
}
|
||||
|
||||
EnvClampBounds ReaSamplerEditor::envClampBounds() const {
|
||||
|
||||
Reference in New Issue
Block a user