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