Phase S FB1 (r11): Sample-view recomposition — knob deck + elastic full-width hero + curve popup w/ right-click delete + post-mixer master gain (ComponentState v8)
This commit is contained in:
@@ -210,6 +210,17 @@ public:
|
||||
MonoTrigger monoTrigger();
|
||||
void setMonoTrigger(MonoTrigger trigger);
|
||||
|
||||
// --- FB1 post-mixer master gain (per-instance, persisted in component state v8) ---------
|
||||
// LINEAR gain in [0, masterGainMaxLinear()] (0.0 = -inf/true silence, 1.0 = unity, cap =
|
||||
// +24 dB; the pure master_gain module owns the dB knob taper). Held in an atomic so the
|
||||
// audio thread applies it with ONE relaxed load per block as a post-sum multiply over the
|
||||
// rendered output (engine + drain + preview) — no lock, no rebuild, no per-voice cost.
|
||||
// Written by the editor's Gain knob (UI thread) and setState; read by getState + process().
|
||||
double masterGainLinear() const {
|
||||
return static_cast<double>(masterGain_.load(std::memory_order_relaxed));
|
||||
}
|
||||
void setMasterGainLinear(double linear); // clamped to [0, masterGainMaxLinear()]
|
||||
|
||||
// Fire a one-shot PREVIEW note-on / note-off through the live instrument's PREVIEW CARD
|
||||
// (S-VIEW-4; Phase S isolation) — a dedicated single voice structurally OUTSIDE the MIDI
|
||||
// pool, so a full pool never drops a preview and a preview never steals a playing voice.
|
||||
@@ -355,6 +366,11 @@ private:
|
||||
VoiceMode voiceMode_ = VoiceMode::Poly;
|
||||
MonoTrigger monoTrigger_ = MonoTrigger::Retrigger;
|
||||
|
||||
// FB1 post-mixer master gain (LINEAR; persisted in component state v8). A lock-free
|
||||
// atomic — the ONE voice-param the audio thread reads directly (a single relaxed load
|
||||
// per block, applied as a post-sum multiply). Default unity = pre-FB1 output.
|
||||
std::atomic<float> masterGain_{1.0f};
|
||||
|
||||
// --- S-VIEW-4 preview-trigger mailbox (off-thread -> audio thread, lock-free) ---------
|
||||
// The editor's preview-trigger button posts a note-on/off request from the UI thread; process()
|
||||
// drains it at block start and drives the live instrument's PREVIEW CARD (Phase S — never the
|
||||
|
||||
Reference in New Issue
Block a user