BogaudioModules

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

Mix4x.hpp (5721B)


      1 #pragma once
      2 
      3 #include "bogaudio.hpp"
      4 #include "Mix4_shared.hpp"
      5 
      6 using namespace bogaudio::dsp;
      7 
      8 namespace bogaudio {
      9 
     10 struct Mix4x : ExpanderModule<Mix4ExpanderMessage, BGModule> {
     11 	enum ParamsIds {
     12 		LOW1_PARAM,
     13 		MID1_PARAM,
     14 		HIGH1_PARAM,
     15 		A1_PARAM,
     16 		PRE_A1_PARAM,
     17 		B1_PARAM,
     18 		PRE_B1_PARAM,
     19 		LOW2_PARAM,
     20 		MID2_PARAM,
     21 		HIGH2_PARAM,
     22 		A2_PARAM,
     23 		PRE_A2_PARAM,
     24 		B2_PARAM,
     25 		PRE_B2_PARAM,
     26 		LOW3_PARAM,
     27 		MID3_PARAM,
     28 		HIGH3_PARAM,
     29 		A3_PARAM,
     30 		PRE_A3_PARAM,
     31 		B3_PARAM,
     32 		PRE_B3_PARAM,
     33 		LOW4_PARAM,
     34 		MID4_PARAM,
     35 		HIGH4_PARAM,
     36 		A4_PARAM,
     37 		PRE_A4_PARAM,
     38 		B4_PARAM,
     39 		PRE_B4_PARAM,
     40 		LEVEL_A_PARAM,
     41 		LEVEL_B_PARAM,
     42 		NUM_PARAMS
     43 	};
     44 
     45 	enum InputsIds {
     46 		A1_INPUT,
     47 		B1_INPUT,
     48 		A2_INPUT,
     49 		B2_INPUT,
     50 		A3_INPUT,
     51 		B3_INPUT,
     52 		A4_INPUT,
     53 		B4_INPUT,
     54 		L_A_INPUT,
     55 		R_A_INPUT,
     56 		LEVEL_A_INPUT,
     57 		L_B_INPUT,
     58 		R_B_INPUT,
     59 		NUM_INPUTS
     60 	};
     61 
     62 	enum OutputsIds {
     63 		SEND_A_OUTPUT,
     64 		SEND_B_OUTPUT,
     65 		NUM_OUTPUTS
     66 	};
     67 
     68 	MixerExpanderChannel* _channels[4] {};
     69 	Saturator _saturatorA, _saturatorB;
     70 	Amplifier _returnAAmp, _returnBAmp;
     71 	bogaudio::dsp::SlewLimiter _returnASL, _returnBSL;
     72 
     73 	Mix4x() {
     74 		config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS);
     75 		configParam<EQParamQuantity>(LOW1_PARAM, -1.0f, 1.0f, 0.0f, "Channel 1 low", " dB");
     76 		configParam<EQParamQuantity>(MID1_PARAM, -1.0f, 1.0f, 0.0f, "Channel 1 mid", " dB");
     77 		configParam<EQParamQuantity>(HIGH1_PARAM, -1.0f, 1.0f, 0.0f, "Channel 1 high", " dB");
     78 		configParam<AmplifierParamQuantity>(A1_PARAM, 0.0f, 1.0f, 0.0f, "Channel 1 A send");
     79 		configSwitch(PRE_A1_PARAM, 0.0f, 1.0f, 0.0f, "Channel 1 A send", {"Post-fader", "Pre-fader"});
     80 		configParam<AmplifierParamQuantity>(B1_PARAM, 0.0f, 1.0f, 0.0f, "Channel 1 B send");
     81 		configSwitch(PRE_B1_PARAM, 0.0f, 1.0f, 0.0f, "Channel 1 B send", {"Post-fader", "Pre-fader"});
     82 		configParam<EQParamQuantity>(LOW2_PARAM, -1.0f, 1.0f, 0.0f, "Channel 2 low", " dB");
     83 		configParam<EQParamQuantity>(MID2_PARAM, -1.0f, 1.0f, 0.0f, "Channel 2 mid", " dB");
     84 		configParam<EQParamQuantity>(HIGH2_PARAM, -1.0f, 1.0f, 0.0f, "Channel 2 high", " dB");
     85 		configParam<AmplifierParamQuantity>(A2_PARAM, 0.0f, 1.0f, 0.0f, "Channel 2 A send");
     86 		configSwitch(PRE_A2_PARAM, 0.0f, 1.0f, 0.0f, "Channel 2 A send", {"Post-fader", "Pre-fader"});
     87 		configParam<AmplifierParamQuantity>(B2_PARAM, 0.0f, 1.0f, 0.0f, "Channel 2 B send");
     88 		configSwitch(PRE_B2_PARAM, 0.0f, 1.0f, 0.0f, "Channel 2 B send", {"Post-fader", "Pre-fader"});
     89 		configParam<EQParamQuantity>(LOW3_PARAM, -1.0f, 1.0f, 0.0f, "Channel 3 low", " dB");
     90 		configParam<EQParamQuantity>(MID3_PARAM, -1.0f, 1.0f, 0.0f, "Channel 3 mid", " dB");
     91 		configParam<EQParamQuantity>(HIGH3_PARAM, -1.0f, 1.0f, 0.0f, "Channel 3 high", " dB");
     92 		configParam<AmplifierParamQuantity>(A3_PARAM, 0.0f, 1.0f, 0.0f, "Channel 3 A send");
     93 		configSwitch(PRE_A3_PARAM, 0.0f, 1.0f, 0.0f, "Channel 3 A send", {"Post-fader", "Pre-fader"});
     94 		configParam<AmplifierParamQuantity>(B3_PARAM, 0.0f, 1.0f, 0.0f, "Channel 3 B send");
     95 		configSwitch(PRE_B3_PARAM, 0.0f, 1.0f, 0.0f, "Channel 3 B send", {"Post-fader", "Pre-fader"});
     96 		configParam<EQParamQuantity>(LOW4_PARAM, -1.0f, 1.0f, 0.0f, "Channel 4 low", " dB");
     97 		configParam<EQParamQuantity>(MID4_PARAM, -1.0f, 1.0f, 0.0f, "Channel 4 mid", " dB");
     98 		configParam<EQParamQuantity>(HIGH4_PARAM, -1.0f, 1.0f, 0.0f, "Channel 4 high", " dB");
     99 		configParam<AmplifierParamQuantity>(A4_PARAM, 0.0f, 1.0f, 0.0f, "Channel 4 A send");
    100 		configSwitch(PRE_A4_PARAM, 0.0f, 1.0f, 0.0f, "Channel 4 A send", {"Post-fader", "Pre-fader"});
    101 		configParam<AmplifierParamQuantity>(B4_PARAM, 0.0f, 1.0f, 0.0f, "Channel 4 B send");
    102 		configSwitch(PRE_B4_PARAM, 0.0f, 1.0f, 0.0f, "Channel 4 B send", {"Post-fader", "Pre-fader"});
    103 		configParam<AmplifierParamQuantity>(LEVEL_A_PARAM, 0.0f, 1.0f, 0.8f, "A return level");
    104 		configParam<AmplifierParamQuantity>(LEVEL_B_PARAM, 0.0f, 1.0f, 0.8f, "B return level");
    105 
    106 		configInput(A1_INPUT, "Channel 1 send A CV");
    107 		configInput(B1_INPUT, "Channel 1 send B CV");
    108 		configInput(A2_INPUT, "Channel 2 send A CV");
    109 		configInput(B2_INPUT, "Channel 2 send B CV");
    110 		configInput(A3_INPUT, "Channel 3 send A CV");
    111 		configInput(B3_INPUT, "Channel 3 send B CV");
    112 		configInput(A4_INPUT, "Channel 4 send A CV");
    113 		configInput(B4_INPUT, "Channel 4 send B CV");
    114 		configInput(L_A_INPUT, "Return A left");
    115 		configInput(R_A_INPUT, "Return A right");
    116 		configInput(LEVEL_A_INPUT, "Return A level CV");
    117 		configInput(L_B_INPUT, "Return B left");
    118 		configInput(R_B_INPUT, "Return B right");
    119 
    120 		configOutput(SEND_A_OUTPUT, "Send A");
    121 		configOutput(SEND_B_OUTPUT, "Send B");
    122 
    123 		_channels[0] = new MixerExpanderChannel(params[LOW1_PARAM], params[MID1_PARAM], params[HIGH1_PARAM], params[A1_PARAM], params[B1_PARAM], params[PRE_A1_PARAM], params[PRE_B1_PARAM], inputs[A1_INPUT], inputs[B1_INPUT]);
    124 		_channels[1] = new MixerExpanderChannel(params[LOW2_PARAM], params[MID2_PARAM], params[HIGH2_PARAM], params[A2_PARAM], params[B2_PARAM], params[PRE_A2_PARAM], params[PRE_B2_PARAM], inputs[A2_INPUT], inputs[B2_INPUT]);
    125 		_channels[2] = new MixerExpanderChannel(params[LOW3_PARAM], params[MID3_PARAM], params[HIGH3_PARAM], params[A3_PARAM], params[B3_PARAM], params[PRE_A3_PARAM], params[PRE_B3_PARAM], inputs[A3_INPUT], inputs[B3_INPUT]);
    126 		_channels[3] = new MixerExpanderChannel(params[LOW4_PARAM], params[MID4_PARAM], params[HIGH4_PARAM], params[A4_PARAM], params[B4_PARAM], params[PRE_A4_PARAM], params[PRE_B4_PARAM], inputs[A4_INPUT], inputs[B4_INPUT]);
    127 
    128 		setBaseModelPredicate([](Model* m) { return m == modelMix4; });
    129 	}
    130 	virtual ~Mix4x() {
    131 		for (int i = 0; i < 4; ++i) {
    132 			delete _channels[i];
    133 		}
    134 	}
    135 
    136 	void sampleRateChange() override;
    137 	void modulate() override;
    138 	void processAll(const ProcessArgs& args) override;
    139 };
    140 
    141 } // namespace bogaudio