BogaudioModules

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

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