#pragma once #include #include #include struct SliderDetail { std::string label; float min, max, interval, defValue; }; using ParamMap = std::unordered_map; // Each SliderDetail: { label, min, max, step, defaultValue } const std::unordered_map PARAM_SETTINGS = { { "chorus", { { "rate", { "Rate", 0.0f, 1.0f, 0.1f, 0.1f } }, { "depth", { "Depth", 0.0f, 1.0f, 0.1f, 0.1f } }, { "centre", { "Centre", 0.0f, 1.0f, 0.1f, 0.1f } }, { "feedback", { "Feedback", 0.0f, 1.0f, 0.1f, 0.1f } }, { "mix", { "Mix", 0.0f, 1.0f, 0.1f, 0.1f } } }}, { "delay", { { "delay", { "Delay", 0.0f, 1.0f, 0.1f, 0.1f } } }}, { "reverb", { { "roomSize", { "Room Size", 0.0f, 1.0f, 0.1f, 0.1f } }, { "damping", { "Damping", 0.0f, 1.0f, 0.1f, 0.1f } }, { "wetLevel", { "Wet Level", 0.0f, 1.0f, 0.1f, 0.1f } }, { "dryLevel", { "Dry Level", 0.0f, 1.0f, 0.1f, 0.1f } }, { "width", { "Width", 0.0f, 1.0f, 0.1f, 0.1f } }, { "freezeMode", { "Freeze Mode", 0.0f, 1.0f, 0.1f, 0.1f } } }}, { "adsr", { { "attack", { "Attack", 0.0f, 1.0f, 0.1f, 0.1f } }, { "decay", { "Decay", 0.0f, 1.0f, 0.1f, 0.1f } }, { "sustain", { "Sustain", 0.0f, 1.0f, 0.1f, 0.1f } }, { "release", { "Release", 0.0f, 1.0f, 0.1f, 0.1f } } }}, // Filter envelope group (short key: "fenv") { "fenv", { { "attack", { "Attack", 0.0f, 2.0f, 0.001f, 0.01f } }, { "decay", { "Decay", 0.0f, 2.0f, 0.001f, 0.10f } }, { "sustain", { "Sustain", 0.0f, 1.0f, 0.001f, 0.80f } }, { "release", { "Release", 0.0f, 4.0f, 0.001f, 0.40f } }, { "amount", { "Amount", -1.0f, 1.0f, 0.001f, 0.50f } } }}, { "flanger", { { "rate", { "Rate", 0.1f, 5.0f, 0.1f, 0.1f } }, { "depth", { "Depth", 0.1f, 10.0f, 0.1f, 0.1f } }, // ms { "feedback", { "Feedback", 0.0f, 0.95f, 0.01f, 0.1f } }, { "dryMix", { "Dry/Wet", 0.0f, 1.0f, 0.01f, 0.0f } }, { "phase", { "Phase", 0.0f, 1.0f, 0.1f, 0.0f } }, { "delay", { "Delay", 0.0f, 3.0f, 0.1f, 0.25f } } // ms base }}, { "filter", { { "cutoff", { "Cutoff", 20.0f, 20000.0f, 1.0f, 1000.0f } }, { "resonance", { "Resonance", 0.1f, 10.0f, 0.1f, 0.7f } }, { "type", { "L/H/B", 0.0f, 2.0f, 1.0f, 0.0f } }, { "drive", { "Drive", 0.0f, 1.0f, 0.01f, 0.0f } }, { "mod", { "Mod", -1.0f, 1.0f, 0.1f, 0.0f } }, { "key", { "Key", 0.0f, 1.0f, 0.1f, 0.0f } } }}, { "distortion", { { "drive", { "Drive", 0.0f, 30.0f, 0.1f, 10.0f } }, { "mix", { "Mix", 0.0f, 1.0f, 0.01f, 0.0f } }, { "bias", { "Bias", -1.0f, 1.0f, 0.01f, 0.0f } }, { "tone", { "Tone", 100.0f, 8000.0f, 10.0f, 3000.0f } }, { "shape", { "Shape", 0.0f, 2.0f, 1.0f, 0.0f } } }} }; struct NeuralSharedParams { std::atomic waveform{ -1 }; // Amp ADSR std::atomic* adsrAttack{}; std::atomic* adsrDecay{}; std::atomic* adsrSustain{}; std::atomic* adsrRelease{}; // Delay std::atomic* delayTime{}; // Chorus std::atomic* chorusRate{}; std::atomic* chorusDepth{}; std::atomic* chorusCentre{}; std::atomic* chorusFeedback{}; std::atomic* chorusMix{}; // Reverb std::atomic* reverbRoomSize{}; std::atomic* reverbDamping{}; std::atomic* reverbWetLevel{}; std::atomic* reverbDryLevel{}; std::atomic* reverbWidth{}; std::atomic* reverbFreezeMode{}; // Flanger std::atomic* flangerRate{}; std::atomic* flangerDepth{}; std::atomic* flangerFeedback{}; std::atomic* flangerDryMix{}; std::atomic* flangerPhase{}; std::atomic* flangerDelay{}; // Filter (base) std::atomic* filterCutoff{}; std::atomic* filterResonance{}; std::atomic* filterType{}; std::atomic* filterDrive{}; std::atomic* filterMod{}; std::atomic* filterKey{}; // Filter Env (polyphonic) std::atomic* fenvAttack{}; std::atomic* fenvDecay{}; std::atomic* fenvSustain{}; std::atomic* fenvRelease{}; std::atomic* fenvAmount{}; // +/- octaves // Distortion std::atomic* distortionDrive{}; std::atomic* distortionMix{}; std::atomic* distortionBias{}; std::atomic* distortionTone{}; std::atomic* distortionShape{}; // Per-panel bypass (AudioParameterBool, exposed as float 0/1 via getRawParameterValue) std::atomic* chorusOn{}; std::atomic* delayOn{}; std::atomic* reverbOn{}; std::atomic* flangerOn{}; std::atomic* distortionOn{}; std::atomic* filterOn{}; std::atomic* eqOn{}; // ==== Wavetable controls ==== std::atomic* wtOn{}; // 0/1 (AudioParameterBool appears as float raw value) std::atomic* wtMorph{}; // 0..15 (continuous frame index) // EQ + Master std::atomic* lowGainDbls{}; std::atomic* midGainDbls{}; std::atomic* highGainDbls{}; std::atomic* masterDbls{}; };