PEQ14XR.hpp (1917B)
1 #pragma once 2 3 #include "PEQ14_shared.hpp" 4 #include "dsp/oscillator.hpp" 5 6 namespace bogaudio { 7 8 struct PEQ14XR : ExpanderModule<PEQ14ExpanderMessage, ExpandableModule<PEQ14ExpanderMessage, PEQXFBase>> { 9 enum ParamsIds { 10 DAMP_PARAM, 11 GAIN_PARAM, 12 NUM_PARAMS 13 }; 14 15 enum InputsIds { 16 DAMP_INPUT, 17 GAIN_INPUT, 18 NUM_INPUTS 19 }; 20 21 enum OutputsIds { 22 OUT_OUTPUT, 23 NUM_OUTPUTS 24 }; 25 26 struct Engine { 27 struct BandOscillator { 28 Phasor _phasor; 29 TriangleOscillator _oscillator; 30 31 inline void setSampleRate(float sr) { _phasor.setSampleRate(sr); } 32 inline void setFrequency(float f) { _phasor.setFrequency(f); } 33 inline float next() { 34 _phasor.advancePhase(); 35 return _oscillator.nextFromPhasor(_phasor); 36 } 37 }; 38 39 BandOscillator oscillators[14]; 40 Amplifier amplifiers[14]; 41 EnvelopeFollower efs[14]; 42 float response = -1.0f; 43 Amplifier efGain; 44 45 void setSampleRate(float sr); 46 }; 47 48 Engine* _engines[maxChannels] {}; 49 Saturator _saturator; 50 PEQ14ExpanderMessage* _baseMessage = NULL; 51 52 PEQ14XR() { 53 config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS); 54 configParam(DAMP_PARAM, 0.0f, 1.0f, 0.3f, "Envelope follower smoothing", "%", 0.0f, 100.0f); 55 configParam<EFGainParamQuantity>(GAIN_PARAM, -1.0f, 1.0f, 0.0f, "Envelope follower gain", " dB"); 56 57 configInput(DAMP_INPUT, "Damp CV"); 58 configInput(GAIN_INPUT, "Gain CV"); 59 60 configOutput(OUT_OUTPUT, "Signal"); 61 62 setBaseModelPredicate([](Model* m) { return m == modelPEQ14 || m == modelPEQ14XF || m == modelPEQ14XR || m == modelPEQ14XV; }); 63 setExpanderModelPredicate([](Model* m) { return m == modelPEQ14XF || m == modelPEQ14XR || m == modelPEQ14XV; }); 64 } 65 66 void sampleRateChange() override; 67 void addChannel(int c) override; 68 void removeChannel(int c) override; 69 void modulateChannel(int c) override; 70 void processAlways(const ProcessArgs& args) override; 71 void processChannel(const ProcessArgs& args, int c) override; 72 }; 73 74 } // namespace bogaudio