BogaudioModules

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

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