BogaudioModules

BogaudioModules for VCV Rack
Log | Files | Refs | README | LICENSE

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