BogaudioModules

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

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