VCA.hpp (1651B)
1 #pragma once 2 3 #include "bogaudio.hpp" 4 #include "dsp/signal.hpp" 5 6 using namespace bogaudio::dsp; 7 8 extern Model* modelVCA; 9 10 namespace bogaudio { 11 12 struct VCA : BGModule { 13 enum ParamsIds { 14 LEVEL1_PARAM, 15 LEVEL2_PARAM, 16 LINEAR_PARAM, 17 NUM_PARAMS 18 }; 19 20 enum InputsIds { 21 CV1_INPUT, 22 IN1_INPUT, 23 CV2_INPUT, 24 IN2_INPUT, 25 NUM_INPUTS 26 }; 27 28 enum OutputsIds { 29 OUT1_OUTPUT, 30 OUT2_OUTPUT, 31 NUM_OUTPUTS 32 }; 33 34 Amplifier _amplifier1[maxChannels]; 35 bogaudio::dsp::SlewLimiter _levelSL1[maxChannels]; 36 Amplifier _amplifier2[maxChannels]; 37 bogaudio::dsp::SlewLimiter _levelSL2[maxChannels]; 38 39 struct LevelParamQuantity : AmplifierParamQuantity { 40 bool isLinear() override; 41 }; 42 43 VCA() { 44 config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS); 45 configParam<LevelParamQuantity>(LEVEL1_PARAM, 0.0f, 1.0f, 0.8f, "Level 1"); 46 configParam<LevelParamQuantity>(LEVEL2_PARAM, 0.0f, 1.0f, 0.8f, "Level 2"); 47 configSwitch(LINEAR_PARAM, 0.0f, 1.0f, 0.0f, "Linear", {"Disabled", "Enabled"}); 48 configBypass(IN1_INPUT, OUT1_OUTPUT); 49 configBypass(IN2_INPUT, OUT2_OUTPUT); 50 51 configInput(CV1_INPUT, "Level 1 CV"); 52 configInput(IN1_INPUT, "Signal 1"); 53 configInput(CV2_INPUT, "Level 2 CV"); 54 configInput(IN2_INPUT, "Signal 2"); 55 56 configOutput(OUT1_OUTPUT, "Signal 1"); 57 configOutput(OUT2_OUTPUT, "Signal 2"); 58 59 sampleRateChange(); 60 } 61 62 inline bool isLinear() { return params[LINEAR_PARAM].getValue() > 0.5f; } 63 void sampleRateChange() override; 64 void processAll(const ProcessArgs& args) override; 65 void channelStep(Input& input, Output& output, Param& knob, Input& cv, Amplifier* amplifier, bogaudio::dsp::SlewLimiter* levelSL, bool linear); 66 }; 67 68 } // namespace bogaudio