PEQ14XV.hpp (2582B)
1 #pragma once 2 3 #include "PEQ14_shared.hpp" 4 5 namespace bogaudio { 6 7 struct PEQ14XV : ExpanderModule<PEQ14ExpanderMessage, ExpandableModule<PEQ14ExpanderMessage, PEQXFBase>> { 8 enum ParamsIds { 9 EF_DAMP_PARAM, 10 EF_GAIN_PARAM, 11 TRANSPOSE_PARAM, 12 OUTPUT_GAIN_PARAM, 13 BAND14_MIX_PARAM, 14 BAND1_ENABLE_PARAM, 15 BAND14_ENABLE_PARAM, 16 NUM_PARAMS 17 }; 18 19 enum InputsIds { 20 EF_DAMP_INPUT, 21 EF_GAIN_INPUT, 22 TRANSPOSE_INPUT, 23 IN_INPUT, 24 NUM_INPUTS 25 }; 26 27 enum OutputsIds { 28 ODDS_OUTPUT, 29 OUT_OUTPUT, 30 EVENS_OUTPUT, 31 NUM_OUTPUTS 32 }; 33 34 struct Engine { 35 MultimodeFilter* filters[14] {}; 36 Amplifier amplifiers[14]; 37 EnvelopeFollower efs[14]; 38 float response = -1.0f; 39 Amplifier efGain; 40 float transposeSemitones = 0.0f; 41 42 Engine(); 43 ~Engine(); 44 }; 45 46 static constexpr float maxOutputGain = 24.0f; 47 48 Engine* _engines[maxChannels] {}; 49 Amplifier _outputGain; 50 Amplifier _band14Mix; 51 bool _band1Enable = true; 52 bool _band14Enable = true; 53 Saturator _saturator; 54 PEQ14ExpanderMessage* _baseMessage = NULL; 55 56 PEQ14XV() { 57 config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS); 58 configParam(EF_DAMP_PARAM, 0.0f, 1.0f, 0.3f, "Envelope follower smoothing", "%", 0.0f, 100.0f); 59 configParam<EFGainParamQuantity>(EF_GAIN_PARAM, -1.0f, 1.0f, 0.0f, "Envelope follower gain", " dB"); 60 configParam(TRANSPOSE_PARAM, -1.0f, 1.0f, 0.0f, "Transpose", " semitones", 0.0f, 24.0f); 61 configParam(OUTPUT_GAIN_PARAM, 0.0f, 1.0f, 0.0f, "Output gain", " dB", 0.0f, maxOutputGain); 62 configParam<AmplifierParamQuantity>(BAND14_MIX_PARAM, 0.0f, 1.0f, 0.0f, "Band 14 audio mix"); 63 configParam(BAND1_ENABLE_PARAM, 0.0f, 1.0f, 1.0f, "Band 1 enable"); 64 configParam(BAND14_ENABLE_PARAM, 0.0f, 1.0f, 1.0f, "Band 14 enable"); 65 66 configInput(EF_DAMP_INPUT, "Envelope follower damp CV"); 67 configInput(EF_GAIN_INPUT, "Envelope follower gain CV"); 68 configInput(TRANSPOSE_INPUT, "Transpose (1V/octave)"); 69 configInput(IN_INPUT, "Signal"); 70 71 configOutput(ODDS_OUTPUT, "Odd channels mix"); 72 configOutput(OUT_OUTPUT, "All channels mix"); 73 configOutput(EVENS_OUTPUT, "Even channels mix"); 74 75 setBaseModelPredicate([](Model* m) { return m == modelPEQ14 || m == modelPEQ14XF || m == modelPEQ14XR || m == modelPEQ14XV; }); 76 setExpanderModelPredicate([](Model* m) { return m == modelPEQ14XF || m == modelPEQ14XR || m == modelPEQ14XV; }); 77 } 78 79 void addChannel(int c) override; 80 void removeChannel(int c) override; 81 void modulate() override; 82 void modulateChannel(int c) override; 83 void processAlways(const ProcessArgs& args) override; 84 void processChannel(const ProcessArgs& args, int c) override; 85 }; 86 87 } // namespace bogaudio