BogaudioModules

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

PEQ.hpp (3819B)


      1 #pragma once
      2 
      3 #include "bogaudio.hpp"
      4 #include "parametric_eq.hpp"
      5 
      6 extern Model* modelPEQ;
      7 
      8 namespace bogaudio {
      9 
     10 struct PEQ : BGModule {
     11 	enum ParamsIds {
     12 		A_LEVEL_PARAM,
     13 		A_FREQUENCY_PARAM,
     14 		A_BANDWIDTH_PARAM,
     15 		A_CV_PARAM,
     16 		B_LEVEL_PARAM,
     17 		B_FREQUENCY_PARAM,
     18 		B_BANDWIDTH_PARAM,
     19 		B_CV_PARAM,
     20 		C_LEVEL_PARAM,
     21 		C_FREQUENCY_PARAM,
     22 		C_BANDWIDTH_PARAM,
     23 		C_CV_PARAM,
     24 		A_MODE_PARAM,
     25 		C_MODE_PARAM,
     26 		NUM_PARAMS
     27 	};
     28 
     29 	enum InputsIds {
     30 		A_LEVEL_INPUT,
     31 		B_LEVEL_INPUT,
     32 		C_LEVEL_INPUT,
     33 		A_FREQUENCY_INPUT,
     34 		B_FREQUENCY_INPUT,
     35 		C_FREQUENCY_INPUT,
     36 		A_BANDWIDTH_INPUT,
     37 		B_BANDWIDTH_INPUT,
     38 		C_BANDWIDTH_INPUT,
     39 		ALL_CV_INPUT,
     40 		IN_INPUT,
     41 		NUM_INPUTS
     42 	};
     43 
     44 	enum OutputsIds {
     45 		OUT_OUTPUT,
     46 		NUM_OUTPUTS
     47 	};
     48 
     49 	enum LightsIds {
     50 		A_LIGHT,
     51 		B_LIGHT,
     52 		C_LIGHT,
     53 		NUM_LIGHTS
     54 	};
     55 
     56 	PEQEngine* _engines[maxChannels] {};
     57 	float _rmsSums[3] {};
     58 
     59 	PEQ() {
     60 		config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);
     61 		float levelDefault = fabsf(PEQChannel::minDecibels) / (PEQChannel::maxDecibels - PEQChannel::minDecibels);
     62 		configParam(A_LEVEL_PARAM, 0.0f, 1.0f, levelDefault, "Channel A level", " dB", 0.0f, PEQChannel::maxDecibels - PEQChannel::minDecibels, PEQChannel::minDecibels);
     63 		configParam<ScaledSquaringParamQuantity<(int)PEQChannel::maxFrequency>>(A_FREQUENCY_PARAM, 0.0f, 1.0f, 0.0707107f, "Channel A frequency", " HZ");
     64 		configParam(A_BANDWIDTH_PARAM, 0.0f, 1.0f, 0.5f, "Channel A bandwidth", "%", 0.0f, 100.0f);
     65 		configParam(A_CV_PARAM, -1.0f, 1.0f, 0.0f, "Channel A frequency CV attenuation", "%", 0.0f, 100.0f);
     66 		configSwitch(A_MODE_PARAM, 0.0f, 1.0f, 1.0f, "Channel A LP/BP", {"Bandpass", "Lowpass"});
     67 		configParam(B_LEVEL_PARAM, 0.0f, 1.0f, levelDefault, "Channel B level", " dB", 0.0f, PEQChannel::maxDecibels - PEQChannel::minDecibels, PEQChannel::minDecibels);
     68 		configParam<ScaledSquaringParamQuantity<(int)PEQChannel::maxFrequency>>(B_FREQUENCY_PARAM, 0.0f, 1.0f, 0.1322876f, "Channel B frequency", " HZ");
     69 		configParam(B_BANDWIDTH_PARAM, 0.0f, 1.0f, 0.66f, "Channel B bandwidth", "%", 0.0f, 100.0f);
     70 		configParam(B_CV_PARAM, -1.0f, 1.0f, 0.0f, "Channel B frequency CV attenuation", "%", 0.0f, 100.0f);
     71 		configParam(C_LEVEL_PARAM, 0.0f, 1.0f, levelDefault, "Channel C level", " dB", 0.0f, PEQChannel::maxDecibels - PEQChannel::minDecibels, PEQChannel::minDecibels);
     72 		configParam<ScaledSquaringParamQuantity<(int)PEQChannel::maxFrequency>>(C_FREQUENCY_PARAM, 0.0f, 1.0f, 0.223607f, "Channel C frequency", " HZ");
     73 		configParam(C_BANDWIDTH_PARAM, 0.0f, 1.0f, 0.5f, "Channel C bandwidth", "%", 0.0f, 100.0f);
     74 		configParam(C_CV_PARAM, -1.0f, 1.0f, 0.0f, "Channel C frequency CV attenuation", "%", 0.0f, 100.0f);
     75 		configSwitch(C_MODE_PARAM, 0.0f, 1.0f, 1.0f, "Channel C HP/BP", {"Bandpass", "Highpass"});
     76 		configBypass(IN_INPUT, OUT_OUTPUT);
     77 
     78 		configInput(A_LEVEL_INPUT, "Channel A level CV");
     79 		configInput(B_LEVEL_INPUT, "Channel B level CV");
     80 		configInput(C_LEVEL_INPUT, "Channel C level CV");
     81 		configInput(A_FREQUENCY_INPUT, "Channel A frequency CV");
     82 		configInput(B_FREQUENCY_INPUT, "Channel B frequency CV");
     83 		configInput(C_FREQUENCY_INPUT, "Channel C frequency CV");
     84 		configInput(A_BANDWIDTH_INPUT, "Channel A bandwidth CV");
     85 		configInput(B_BANDWIDTH_INPUT, "Channel B bandwidth CV");
     86 		configInput(C_BANDWIDTH_INPUT, "Channel C bandwidth CV");
     87 		configInput(ALL_CV_INPUT, "All-channels frequency CV");
     88 		configInput(IN_INPUT, "Signal");
     89 
     90 		configOutput(OUT_OUTPUT, "Signal");
     91 	}
     92 
     93 	void sampleRateChange() override;
     94 	bool active() override;
     95 	int channels() override;
     96 	void addChannel(int c) override;
     97 	void removeChannel(int c) override;
     98 	void modulate() override;
     99 	void processAlways(const ProcessArgs& args) override;
    100 	void processChannel(const ProcessArgs& args, int c) override;
    101 	void postProcessAlways(const ProcessArgs& args) override;
    102 };
    103 
    104 } // namespace bogaudio