PEQ14.hpp (12068B)
1 #pragma once 2 3 #include "PEQ14_shared.hpp" 4 5 namespace bogaudio { 6 7 struct PEQ14 : ExpandableModule<PEQ14ExpanderMessage, BandExcludeModule> { 8 enum ParamsIds { 9 FREQUENCY_CV_PARAM, 10 BANDWIDTH_PARAM, 11 LP_PARAM, 12 HP_PARAM, 13 FMOD_PARAM, 14 LEVEL1_PARAM, 15 FREQUENCY1_PARAM, 16 FREQUENCY_CV1_PARAM, 17 LEVEL2_PARAM, 18 FREQUENCY2_PARAM, 19 FREQUENCY_CV2_PARAM, 20 LEVEL3_PARAM, 21 FREQUENCY3_PARAM, 22 FREQUENCY_CV3_PARAM, 23 LEVEL4_PARAM, 24 FREQUENCY4_PARAM, 25 FREQUENCY_CV4_PARAM, 26 LEVEL5_PARAM, 27 FREQUENCY5_PARAM, 28 FREQUENCY_CV5_PARAM, 29 LEVEL6_PARAM, 30 FREQUENCY6_PARAM, 31 FREQUENCY_CV6_PARAM, 32 LEVEL7_PARAM, 33 FREQUENCY7_PARAM, 34 FREQUENCY_CV7_PARAM, 35 LEVEL8_PARAM, 36 FREQUENCY8_PARAM, 37 FREQUENCY_CV8_PARAM, 38 LEVEL9_PARAM, 39 FREQUENCY9_PARAM, 40 FREQUENCY_CV9_PARAM, 41 LEVEL10_PARAM, 42 FREQUENCY10_PARAM, 43 FREQUENCY_CV10_PARAM, 44 LEVEL11_PARAM, 45 FREQUENCY11_PARAM, 46 FREQUENCY_CV11_PARAM, 47 LEVEL12_PARAM, 48 FREQUENCY12_PARAM, 49 FREQUENCY_CV12_PARAM, 50 LEVEL13_PARAM, 51 FREQUENCY13_PARAM, 52 FREQUENCY_CV13_PARAM, 53 LEVEL14_PARAM, 54 FREQUENCY14_PARAM, 55 FREQUENCY_CV14_PARAM, 56 NUM_PARAMS 57 }; 58 59 enum InputsIds { 60 FREQUENCY_CV_INPUT, 61 BANDWIDTH_INPUT, 62 IN_INPUT, 63 LEVEL1_INPUT, 64 FREQUENCY_CV1_INPUT, 65 LEVEL2_INPUT, 66 FREQUENCY_CV2_INPUT, 67 LEVEL3_INPUT, 68 FREQUENCY_CV3_INPUT, 69 LEVEL4_INPUT, 70 FREQUENCY_CV4_INPUT, 71 LEVEL5_INPUT, 72 FREQUENCY_CV5_INPUT, 73 LEVEL6_INPUT, 74 FREQUENCY_CV6_INPUT, 75 LEVEL7_INPUT, 76 FREQUENCY_CV7_INPUT, 77 LEVEL8_INPUT, 78 FREQUENCY_CV8_INPUT, 79 LEVEL9_INPUT, 80 FREQUENCY_CV9_INPUT, 81 LEVEL10_INPUT, 82 FREQUENCY_CV10_INPUT, 83 LEVEL11_INPUT, 84 FREQUENCY_CV11_INPUT, 85 LEVEL12_INPUT, 86 FREQUENCY_CV12_INPUT, 87 LEVEL13_INPUT, 88 FREQUENCY_CV13_INPUT, 89 LEVEL14_INPUT, 90 FREQUENCY_CV14_INPUT, 91 NUM_INPUTS 92 }; 93 94 enum OutputsIds { 95 ODDS_OUTPUT, 96 OUT_OUTPUT, 97 EVENS_OUTPUT, 98 OUT1_OUTPUT, 99 OUT2_OUTPUT, 100 OUT3_OUTPUT, 101 OUT4_OUTPUT, 102 OUT5_OUTPUT, 103 OUT6_OUTPUT, 104 OUT7_OUTPUT, 105 OUT8_OUTPUT, 106 OUT9_OUTPUT, 107 OUT10_OUTPUT, 108 OUT11_OUTPUT, 109 OUT12_OUTPUT, 110 OUT13_OUTPUT, 111 OUT14_OUTPUT, 112 NUM_OUTPUTS 113 }; 114 115 enum LightsIds { 116 FMOD_RELATIVE_LIGHT, 117 FMOD_FULL_LIGHT, 118 NUM_LIGHTS 119 }; 120 121 PEQEngine* _engines[maxChannels] {}; 122 float _rmsSums[14] {}; 123 float _rms[14] {}; 124 MultimodeFilter::Mode _lowMode = MultimodeFilter::LOWPASS_MODE; 125 MultimodeFilter::Mode _highMode = MultimodeFilter::HIGHPASS_MODE; 126 bool _fullFrequencyMode = false; 127 128 PEQ14() { 129 config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); 130 float levelDefault = fabsf(PEQChannel::minDecibels) / (PEQChannel::maxDecibels - PEQChannel::minDecibels); 131 configParam(FREQUENCY_CV_PARAM, -1.0f, 1.0f, 0.0f, "Global frequency CV attenuation", "%", 0.0f, 100.0f); 132 configParam(BANDWIDTH_PARAM, 0.0f, 1.0f, 0.11f, "Bandwidth", "%", 0.0f, 100.0f); 133 configSwitch(LP_PARAM, 0.0f, 1.0f, 1.0f, "Channel 1 LP/BP", {"Bandpass", "Lowpass"}); 134 configSwitch(HP_PARAM, 0.0f, 1.0f, 1.0f, "Channel 6 HP/BP", {"Bandpass", "Highpass"}); 135 configSwitch(FMOD_PARAM, 0.0f, 1.0f, 0.0f, "Frequency modulation range", {"Octave", "Full"}); 136 configParam(LEVEL1_PARAM, 0.0f, 1.0f, levelDefault, "Channel 1 level", " dB", 0.0f, PEQChannel::maxDecibels - PEQChannel::minDecibels, PEQChannel::minDecibels); 137 configParam<ScaledSquaringParamQuantity<(int)PEQChannel::maxFrequency>>(FREQUENCY1_PARAM, 0.0f, 1.0f, 0.0689202f, "Channel 1 frequency", " HZ"); 138 configParam(FREQUENCY_CV1_PARAM, -1.0f, 1.0f, 1.0f, "Channel 1 frequency CV attenuation", "%", 0.0f, 100.0f); 139 configParam(LEVEL2_PARAM, 0.0f, 1.0f, levelDefault, "Channel 2 level", " dB", 0.0f, PEQChannel::maxDecibels - PEQChannel::minDecibels, PEQChannel::minDecibels); 140 configParam<ScaledSquaringParamQuantity<(int)PEQChannel::maxFrequency>>(FREQUENCY2_PARAM, 0.0f, 1.0f, 0.0790569f, "Channel 2 frequency", " HZ"); 141 configParam(FREQUENCY_CV2_PARAM, -1.0f, 1.0f, 1.0f, "Channel 2 frequency CV attenuation", "%", 0.0f, 100.0f); 142 configParam(LEVEL3_PARAM, 0.0f, 1.0f, levelDefault, "Channel 3 level", " dB", 0.0f, PEQChannel::maxDecibels - PEQChannel::minDecibels, PEQChannel::minDecibels); 143 configParam<ScaledSquaringParamQuantity<(int)PEQChannel::maxFrequency>>(FREQUENCY3_PARAM, 0.0f, 1.0f, 0.0935414f, "Channel 3 frequency", " HZ"); 144 configParam(FREQUENCY_CV3_PARAM, -1.0f, 1.0f, 1.0f, "Channel 3 frequency CV attenuation", "%", 0.0f, 100.0f); 145 configParam(LEVEL4_PARAM, 0.0f, 1.0f, levelDefault, "Channel 4 level", " dB", 0.0f, PEQChannel::maxDecibels - PEQChannel::minDecibels, PEQChannel::minDecibels); 146 configParam<ScaledSquaringParamQuantity<(int)PEQChannel::maxFrequency>>(FREQUENCY4_PARAM, 0.0f, 1.0f, 0.1118034f, "Channel 4 frequency", " HZ"); 147 configParam(FREQUENCY_CV4_PARAM, -1.0f, 1.0f, 1.0f, "Channel 4 frequency CV attenuation", "%", 0.0f, 100.0f); 148 configParam(LEVEL5_PARAM, 0.0f, 1.0f, levelDefault, "Channel 5 level", " dB", 0.0f, PEQChannel::maxDecibels - PEQChannel::minDecibels, PEQChannel::minDecibels); 149 configParam<ScaledSquaringParamQuantity<(int)PEQChannel::maxFrequency>>(FREQUENCY5_PARAM, 0.0f, 1.0f, 0.1322876f, "Channel 5 frequency", " HZ"); 150 configParam(FREQUENCY_CV5_PARAM, -1.0f, 1.0f, 1.0f, "Channel 5 frequency CV attenuation", "%", 0.0f, 100.0f); 151 configParam(LEVEL6_PARAM, 0.0f, 1.0f, levelDefault, "Channel 6 level", " dB", 0.0f, PEQChannel::maxDecibels - PEQChannel::minDecibels, PEQChannel::minDecibels); 152 configParam<ScaledSquaringParamQuantity<(int)PEQChannel::maxFrequency>>(FREQUENCY6_PARAM, 0.0f, 1.0f, 0.1581139f, "Channel 6 frequency", " HZ"); 153 configParam(FREQUENCY_CV6_PARAM, -1.0f, 1.0f, 1.0f, "Channel 6 frequency CV attenuation", "%", 0.0f, 100.0f); 154 configParam(LEVEL7_PARAM, 0.0f, 1.0f, levelDefault, "Channel 7 level", " dB", 0.0f, PEQChannel::maxDecibels - PEQChannel::minDecibels, PEQChannel::minDecibels); 155 configParam<ScaledSquaringParamQuantity<(int)PEQChannel::maxFrequency>>(FREQUENCY7_PARAM, 0.0f, 1.0f, 0.1870829f, "Channel 7 frequency", " HZ"); 156 configParam(FREQUENCY_CV7_PARAM, -1.0f, 1.0f, 1.0f, "Channel 7 frequency CV attenuation", "%", 0.0f, 100.0f); 157 configParam(LEVEL8_PARAM, 0.0f, 1.0f, levelDefault, "Channel 8 level", " dB", 0.0f, PEQChannel::maxDecibels - PEQChannel::minDecibels, PEQChannel::minDecibels); 158 configParam<ScaledSquaringParamQuantity<(int)PEQChannel::maxFrequency>>(FREQUENCY8_PARAM, 0.0f, 1.0f, 0.2236068f, "Channel 8 frequency", " HZ"); 159 configParam(FREQUENCY_CV8_PARAM, -1.0f, 1.0f, 1.0f, "Channel 8 frequency CV attenuation", "%", 0.0f, 100.0f); 160 configParam(LEVEL9_PARAM, 0.0f, 1.0f, levelDefault, "Channel 9 level", " dB", 0.0f, PEQChannel::maxDecibels - PEQChannel::minDecibels, PEQChannel::minDecibels); 161 configParam<ScaledSquaringParamQuantity<(int)PEQChannel::maxFrequency>>(FREQUENCY9_PARAM, 0.0f, 1.0f, 0.2645751f, "Channel 9 frequency", " HZ"); 162 configParam(FREQUENCY_CV9_PARAM, -1.0f, 1.0f, 1.0f, "Channel 9 frequency CV attenuation", "%", 0.0f, 100.0f); 163 configParam(LEVEL10_PARAM, 0.0f, 1.0f, levelDefault, "Channel 10 level", " dB", 0.0f, PEQChannel::maxDecibels - PEQChannel::minDecibels, PEQChannel::minDecibels); 164 configParam<ScaledSquaringParamQuantity<(int)PEQChannel::maxFrequency>>(FREQUENCY10_PARAM, 0.0f, 1.0f, SQUARE_ROOT_ONE_TENTH, "Channel 10 frequency", " HZ"); 165 configParam(FREQUENCY_CV10_PARAM, -1.0f, 1.0f, 1.0f, "Channel 10 frequency CV attenuation", "%", 0.0f, 100.0f); 166 configParam(LEVEL11_PARAM, 0.0f, 1.0f, levelDefault, "Channel 11 level", " dB", 0.0f, PEQChannel::maxDecibels - PEQChannel::minDecibels, PEQChannel::minDecibels); 167 configParam<ScaledSquaringParamQuantity<(int)PEQChannel::maxFrequency>>(FREQUENCY11_PARAM, 0.0f, 1.0f, 0.3741657f, "Channel 11 frequency", " HZ"); 168 configParam(FREQUENCY_CV11_PARAM, -1.0f, 1.0f, 1.0f, "Channel 11 frequency CV attenuation", "%", 0.0f, 100.0f); 169 configParam(LEVEL12_PARAM, 0.0f, 1.0f, levelDefault, "Channel 12 level", " dB", 0.0f, PEQChannel::maxDecibels - PEQChannel::minDecibels, PEQChannel::minDecibels); 170 configParam<ScaledSquaringParamQuantity<(int)PEQChannel::maxFrequency>>(FREQUENCY12_PARAM, 0.0f, 1.0f, 0.4472136f, "Channel 12 frequency", " HZ"); 171 configParam(FREQUENCY_CV12_PARAM, -1.0f, 1.0f, 1.0f, "Channel 12 frequency CV attenuation", "%", 0.0f, 100.0f); 172 configParam(LEVEL13_PARAM, 0.0f, 1.0f, levelDefault, "Channel 13 level", " dB", 0.0f, PEQChannel::maxDecibels - PEQChannel::minDecibels, PEQChannel::minDecibels); 173 configParam<ScaledSquaringParamQuantity<(int)PEQChannel::maxFrequency>>(FREQUENCY13_PARAM, 0.0f, 1.0f, 0.5291503f, "Channel 13 frequency", " HZ"); 174 configParam(FREQUENCY_CV13_PARAM, -1.0f, 1.0f, 1.0f, "Channel 13 frequency CV attenuation", "%", 0.0f, 100.0f); 175 configParam(LEVEL14_PARAM, 0.0f, 1.0f, levelDefault, "Channel 14 level", " dB", 0.0f, PEQChannel::maxDecibels - PEQChannel::minDecibels, PEQChannel::minDecibels); 176 configParam<ScaledSquaringParamQuantity<(int)PEQChannel::maxFrequency>>(FREQUENCY14_PARAM, 0.0f, 1.0f, 0.5873670f, "Channel 14 frequency", " HZ"); 177 configParam(FREQUENCY_CV14_PARAM, -1.0f, 1.0f, 1.0f, "Channel 14 frequency CV attenuation", "%", 0.0f, 100.0f); 178 configBypass(IN_INPUT, OUT_OUTPUT); 179 configBypass(IN_INPUT, ODDS_OUTPUT); 180 configBypass(IN_INPUT, EVENS_OUTPUT); 181 182 configInput(FREQUENCY_CV_INPUT, "Frequency CV"); 183 configInput(BANDWIDTH_INPUT, "Bandwidth CV"); 184 configInput(IN_INPUT, "Signal"); 185 configInput(LEVEL1_INPUT, "Channel 1 level CV"); 186 configInput(FREQUENCY_CV1_INPUT, "Channel 1 frequency CV"); 187 configInput(LEVEL2_INPUT, "Channel 2 level CV"); 188 configInput(FREQUENCY_CV2_INPUT, "Channel 2 frequency CV"); 189 configInput(LEVEL3_INPUT, "Channel 3 level CV"); 190 configInput(FREQUENCY_CV3_INPUT, "Channel 3 frequency CV"); 191 configInput(LEVEL4_INPUT, "Channel 4 level CV"); 192 configInput(FREQUENCY_CV4_INPUT, "Channel 4 frequency CV"); 193 configInput(LEVEL5_INPUT, "Channel 5 level CV"); 194 configInput(FREQUENCY_CV5_INPUT, "Channel 5 frequency CV"); 195 configInput(LEVEL6_INPUT, "Channel 6 level CV"); 196 configInput(FREQUENCY_CV6_INPUT, "Channel 6 frequency CV"); 197 configInput(LEVEL7_INPUT, "Channel 7 level CV"); 198 configInput(FREQUENCY_CV7_INPUT, "Channel 7 frequency CV"); 199 configInput(LEVEL8_INPUT, "Channel 8 level CV"); 200 configInput(FREQUENCY_CV8_INPUT, "Channel 8 frequency CV"); 201 configInput(LEVEL9_INPUT, "Channel 9 level CV"); 202 configInput(FREQUENCY_CV9_INPUT, "Channel 9 frequency CV"); 203 configInput(LEVEL10_INPUT, "Channel 10 level CV"); 204 configInput(FREQUENCY_CV10_INPUT, "Channel 10 frequency CV"); 205 configInput(LEVEL11_INPUT, "Channel 11 level CV"); 206 configInput(FREQUENCY_CV11_INPUT, "Channel 11 frequency CV"); 207 configInput(LEVEL12_INPUT, "Channel 12 level CV"); 208 configInput(FREQUENCY_CV12_INPUT, "Channel 12 frequency CV"); 209 configInput(LEVEL13_INPUT, "Channel 13 level CV"); 210 configInput(FREQUENCY_CV13_INPUT, "Channel 13 frequency CV"); 211 configInput(LEVEL14_INPUT, "Channel 14 level CV"); 212 configInput(FREQUENCY_CV14_INPUT, "Channel 14 frequency CV"); 213 214 configOutput(ODDS_OUTPUT, "Odd channels mix"); 215 configOutput(OUT_OUTPUT, "All channels mix"); 216 configOutput(EVENS_OUTPUT, "Even channels mix"); 217 configOutput(OUT1_OUTPUT, "Channel 1"); 218 configOutput(OUT2_OUTPUT, "Channel 2"); 219 configOutput(OUT3_OUTPUT, "Channel 3"); 220 configOutput(OUT4_OUTPUT, "Channel 4"); 221 configOutput(OUT5_OUTPUT, "Channel 5"); 222 configOutput(OUT6_OUTPUT, "Channel 6"); 223 configOutput(OUT7_OUTPUT, "Channel 7"); 224 configOutput(OUT8_OUTPUT, "Channel 8"); 225 configOutput(OUT9_OUTPUT, "Channel 9"); 226 configOutput(OUT10_OUTPUT, "Channel 10"); 227 configOutput(OUT11_OUTPUT, "Channel 11"); 228 configOutput(OUT12_OUTPUT, "Channel 12"); 229 configOutput(OUT13_OUTPUT, "Channel 13"); 230 configOutput(OUT14_OUTPUT, "Channel 14"); 231 232 setExpanderModelPredicate([](Model* m) { return m == modelPEQ14XF || m == modelPEQ14XR || m == modelPEQ14XV; }); 233 } 234 235 void sampleRateChange() override; 236 bool active() override; 237 int channels() override; 238 void addChannel(int c) override; 239 void removeChannel(int c) override; 240 void modulate() override; 241 void processAlways(const ProcessArgs& args) override; 242 void processChannel(const ProcessArgs& args, int c) override; 243 void postProcessAlways(const ProcessArgs& args) override; 244 }; 245 246 } // namespace bogaudio