BogaudioModules

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

Mix8x.hpp (10000B)


      1 #pragma once
      2 
      3 #include "bogaudio.hpp"
      4 #include "Mix8_shared.hpp"
      5 
      6 using namespace bogaudio::dsp;
      7 namespace bogaudio {
      8 
      9 struct Mix8x : ExpanderModule<Mix8ExpanderMessage, BGModule> {
     10 	enum ParamsIds {
     11 		LOW1_PARAM,
     12 		MID1_PARAM,
     13 		HIGH1_PARAM,
     14 		A1_PARAM,
     15 		PRE_A1_PARAM,
     16 		B1_PARAM,
     17 		PRE_B1_PARAM,
     18 		LOW2_PARAM,
     19 		MID2_PARAM,
     20 		HIGH2_PARAM,
     21 		A2_PARAM,
     22 		PRE_A2_PARAM,
     23 		B2_PARAM,
     24 		PRE_B2_PARAM,
     25 		LOW3_PARAM,
     26 		MID3_PARAM,
     27 		HIGH3_PARAM,
     28 		A3_PARAM,
     29 		PRE_A3_PARAM,
     30 		B3_PARAM,
     31 		PRE_B3_PARAM,
     32 		LOW4_PARAM,
     33 		MID4_PARAM,
     34 		HIGH4_PARAM,
     35 		A4_PARAM,
     36 		PRE_A4_PARAM,
     37 		B4_PARAM,
     38 		PRE_B4_PARAM,
     39 		LOW5_PARAM,
     40 		MID5_PARAM,
     41 		HIGH5_PARAM,
     42 		A5_PARAM,
     43 		PRE_A5_PARAM,
     44 		B5_PARAM,
     45 		PRE_B5_PARAM,
     46 		LOW6_PARAM,
     47 		MID6_PARAM,
     48 		HIGH6_PARAM,
     49 		A6_PARAM,
     50 		PRE_A6_PARAM,
     51 		B6_PARAM,
     52 		PRE_B6_PARAM,
     53 		LOW7_PARAM,
     54 		MID7_PARAM,
     55 		HIGH7_PARAM,
     56 		A7_PARAM,
     57 		PRE_A7_PARAM,
     58 		B7_PARAM,
     59 		PRE_B7_PARAM,
     60 		LOW8_PARAM,
     61 		MID8_PARAM,
     62 		HIGH8_PARAM,
     63 		A8_PARAM,
     64 		PRE_A8_PARAM,
     65 		B8_PARAM,
     66 		PRE_B8_PARAM,
     67 		LEVEL_A_PARAM,
     68 		LEVEL_B_PARAM,
     69 		NUM_PARAMS
     70 	};
     71 
     72 	enum InputsIds {
     73 		A1_INPUT,
     74 		B1_INPUT,
     75 		A2_INPUT,
     76 		B2_INPUT,
     77 		A3_INPUT,
     78 		B3_INPUT,
     79 		A4_INPUT,
     80 		B4_INPUT,
     81 		A5_INPUT,
     82 		B5_INPUT,
     83 		A6_INPUT,
     84 		B6_INPUT,
     85 		A7_INPUT,
     86 		B7_INPUT,
     87 		A8_INPUT,
     88 		B8_INPUT,
     89 		L_A_INPUT,
     90 		R_A_INPUT,
     91 		LEVEL_A_INPUT,
     92 		L_B_INPUT,
     93 		R_B_INPUT,
     94 		NUM_INPUTS
     95 	};
     96 
     97 	enum OutputsIds {
     98 		SEND_A_OUTPUT,
     99 		SEND_B_OUTPUT,
    100 		NUM_OUTPUTS
    101 	};
    102 
    103 	MixerExpanderChannel* _channels[8] {};
    104 	Saturator _saturatorA, _saturatorB;
    105 	Amplifier _returnAAmp, _returnBAmp;
    106 	bogaudio::dsp::SlewLimiter _returnASL, _returnBSL;
    107 
    108 	Mix8x() {
    109 		config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS);
    110 		configParam<EQParamQuantity>(LOW1_PARAM, -1.0f, 1.0f, 0.0f, "Channel 1 low", " dB");
    111 		configParam<EQParamQuantity>(MID1_PARAM, -1.0f, 1.0f, 0.0f, "Channel 1 mid", " dB");
    112 		configParam<EQParamQuantity>(HIGH1_PARAM, -1.0f, 1.0f, 0.0f, "Channel 1 high", " dB");
    113 		configParam<AmplifierParamQuantity>(A1_PARAM, 0.0f, 1.0f, 0.0f, "Channel 1 A send");
    114 		configSwitch(PRE_A1_PARAM, 0.0f, 1.0f, 0.0f, "Channel 1 A send", {"Post-fader", "Pre-fader"});
    115 		configParam<AmplifierParamQuantity>(B1_PARAM, 0.0f, 1.0f, 0.0f, "Channel 1 B send");
    116 		configSwitch(PRE_B1_PARAM, 0.0f, 1.0f, 0.0f, "Channel 1 B send", {"Post-fader", "Pre-fader"});
    117 		configParam<EQParamQuantity>(LOW2_PARAM, -1.0f, 1.0f, 0.0f, "Channel 2 low", " dB");
    118 		configParam<EQParamQuantity>(MID2_PARAM, -1.0f, 1.0f, 0.0f, "Channel 2 mid", " dB");
    119 		configParam<EQParamQuantity>(HIGH2_PARAM, -1.0f, 1.0f, 0.0f, "Channel 2 high", " dB");
    120 		configParam<AmplifierParamQuantity>(A2_PARAM, 0.0f, 1.0f, 0.0f, "Channel 2 A send");
    121 		configSwitch(PRE_A2_PARAM, 0.0f, 1.0f, 0.0f, "Channel 2 A send", {"Post-fader", "Pre-fader"});
    122 		configParam<AmplifierParamQuantity>(B2_PARAM, 0.0f, 1.0f, 0.0f, "Channel 2 B send");
    123 		configSwitch(PRE_B2_PARAM, 0.0f, 1.0f, 0.0f, "Channel 2 B send", {"Post-fader", "Pre-fader"});
    124 		configParam<EQParamQuantity>(LOW3_PARAM, -1.0f, 1.0f, 0.0f, "Channel 3 low", " dB");
    125 		configParam<EQParamQuantity>(MID3_PARAM, -1.0f, 1.0f, 0.0f, "Channel 3 mid", " dB");
    126 		configParam<EQParamQuantity>(HIGH3_PARAM, -1.0f, 1.0f, 0.0f, "Channel 3 high", " dB");
    127 		configParam<AmplifierParamQuantity>(A3_PARAM, 0.0f, 1.0f, 0.0f, "Channel 3 A send");
    128 		configSwitch(PRE_A3_PARAM, 0.0f, 1.0f, 0.0f, "Channel 3 A send", {"Post-fader", "Pre-fader"});
    129 		configParam<AmplifierParamQuantity>(B3_PARAM, 0.0f, 1.0f, 0.0f, "Channel 3 B send");
    130 		configSwitch(PRE_B3_PARAM, 0.0f, 1.0f, 0.0f, "Channel 3 B send", {"Post-fader", "Pre-fader"});
    131 		configParam<EQParamQuantity>(LOW4_PARAM, -1.0f, 1.0f, 0.0f, "Channel 4 low", " dB");
    132 		configParam<EQParamQuantity>(MID4_PARAM, -1.0f, 1.0f, 0.0f, "Channel 4 mid", " dB");
    133 		configParam<EQParamQuantity>(HIGH4_PARAM, -1.0f, 1.0f, 0.0f, "Channel 4 high", " dB");
    134 		configParam<AmplifierParamQuantity>(A4_PARAM, 0.0f, 1.0f, 0.0f, "Channel 4 A send");
    135 		configSwitch(PRE_A4_PARAM, 0.0f, 1.0f, 0.0f, "Channel 4 A send", {"Post-fader", "Pre-fader"});
    136 		configParam<AmplifierParamQuantity>(B4_PARAM, 0.0f, 1.0f, 0.0f, "Channel 4 B send");
    137 		configSwitch(PRE_B4_PARAM, 0.0f, 1.0f, 0.0f, "Channel 4 B send", {"Post-fader", "Pre-fader"});
    138 		configParam<EQParamQuantity>(LOW5_PARAM, -1.0f, 1.0f, 0.0f, "Channel 5 low", " dB");
    139 		configParam<EQParamQuantity>(MID5_PARAM, -1.0f, 1.0f, 0.0f, "Channel 5 mid", " dB");
    140 		configParam<EQParamQuantity>(HIGH5_PARAM, -1.0f, 1.0f, 0.0f, "Channel 5 high", " dB");
    141 		configParam<AmplifierParamQuantity>(A5_PARAM, 0.0f, 1.0f, 0.0f, "Channel 5 A send");
    142 		configSwitch(PRE_A5_PARAM, 0.0f, 1.0f, 0.0f, "Channel 5 A send", {"Post-fader", "Pre-fader"});
    143 		configParam<AmplifierParamQuantity>(B5_PARAM, 0.0f, 1.0f, 0.0f, "Channel 5 B send");
    144 		configSwitch(PRE_B5_PARAM, 0.0f, 1.0f, 0.0f, "Channel 5 B send", {"Post-fader", "Pre-fader"});
    145 		configParam<EQParamQuantity>(LOW6_PARAM, -1.0f, 1.0f, 0.0f, "Channel 6 low", " dB");
    146 		configParam<EQParamQuantity>(MID6_PARAM, -1.0f, 1.0f, 0.0f, "Channel 6 mid", " dB");
    147 		configParam<EQParamQuantity>(HIGH6_PARAM, -1.0f, 1.0f, 0.0f, "Channel 6 high", " dB");
    148 		configParam<AmplifierParamQuantity>(A6_PARAM, 0.0f, 1.0f, 0.0f, "Channel 6 A send");
    149 		configSwitch(PRE_A6_PARAM, 0.0f, 1.0f, 0.0f, "Channel 6 A send", {"Post-fader", "Pre-fader"});
    150 		configParam<AmplifierParamQuantity>(B6_PARAM, 0.0f, 1.0f, 0.0f, "Channel 6 B send");
    151 		configSwitch(PRE_B6_PARAM, 0.0f, 1.0f, 0.0f, "Channel 6 B send", {"Post-fader", "Pre-fader"});
    152 		configParam<EQParamQuantity>(LOW7_PARAM, -1.0f, 1.0f, 0.0f, "Channel 7 low", " dB");
    153 		configParam<EQParamQuantity>(MID7_PARAM, -1.0f, 1.0f, 0.0f, "Channel 7 mid", " dB");
    154 		configParam<EQParamQuantity>(HIGH7_PARAM, -1.0f, 1.0f, 0.0f, "Channel 7 high", " dB");
    155 		configParam<AmplifierParamQuantity>(A7_PARAM, 0.0f, 1.0f, 0.0f, "Channel 7 A send");
    156 		configSwitch(PRE_A7_PARAM, 0.0f, 1.0f, 0.0f, "Channel 7 A send", {"Post-fader", "Pre-fader"});
    157 		configParam<AmplifierParamQuantity>(B7_PARAM, 0.0f, 1.0f, 0.0f, "Channel 7 B send");
    158 		configSwitch(PRE_B7_PARAM, 0.0f, 1.0f, 0.0f, "Channel 7 B send", {"Post-fader", "Pre-fader"});
    159 		configParam<EQParamQuantity>(LOW8_PARAM, -1.0f, 1.0f, 0.0f, "Channel 8 low", " dB");
    160 		configParam<EQParamQuantity>(MID8_PARAM, -1.0f, 1.0f, 0.0f, "Channel 8 mid", " dB");
    161 		configParam<EQParamQuantity>(HIGH8_PARAM, -1.0f, 1.0f, 0.0f, "Channel 8 high", " dB");
    162 		configParam<AmplifierParamQuantity>(A8_PARAM, 0.0f, 1.0f, 0.0f, "Channel 8 A send");
    163 		configSwitch(PRE_A8_PARAM, 0.0f, 1.0f, 0.0f, "Channel 8 A send", {"Post-fader", "Pre-fader"});
    164 		configParam<AmplifierParamQuantity>(B8_PARAM, 0.0f, 1.0f, 0.0f, "Channel 8 B send");
    165 		configSwitch(PRE_B8_PARAM, 0.0f, 1.0f, 0.0f, "Channel 8 B send", {"Post-fader", "Pre-fader"});
    166 		configParam<AmplifierParamQuantity>(LEVEL_A_PARAM, 0.0f, 1.0f, 0.8f, "A return level");
    167 		configParam<AmplifierParamQuantity>(LEVEL_B_PARAM, 0.0f, 1.0f, 0.8f, "B return level");
    168 
    169 		configInput(A1_INPUT, "Channel 1 send A CV");
    170 		configInput(B1_INPUT, "Channel 1 send B CV");
    171 		configInput(A2_INPUT, "Channel 2 send A CV");
    172 		configInput(B2_INPUT, "Channel 2 send B CV");
    173 		configInput(A3_INPUT, "Channel 3 send A CV");
    174 		configInput(B3_INPUT, "Channel 3 send B CV");
    175 		configInput(A4_INPUT, "Channel 4 send A CV");
    176 		configInput(B4_INPUT, "Channel 4 send B CV");
    177 		configInput(A5_INPUT, "Channel 5 send A CV");
    178 		configInput(B5_INPUT, "Channel 5 send B CV");
    179 		configInput(A6_INPUT, "Channel 6 send A CV");
    180 		configInput(B6_INPUT, "Channel 6 send B CV");
    181 		configInput(A7_INPUT, "Channel 7 send A CV");
    182 		configInput(B7_INPUT, "Channel 7 send B CV");
    183 		configInput(A8_INPUT, "Channel 8 send A CV");
    184 		configInput(B8_INPUT, "Channel 8 send B CV");
    185 		configInput(L_A_INPUT, "Return A left");
    186 		configInput(R_A_INPUT, "Return A right");
    187 		configInput(LEVEL_A_INPUT, "Return A level CV");
    188 		configInput(L_B_INPUT, "Return B left");
    189 		configInput(R_B_INPUT, "Return B right");
    190 
    191 		configOutput(SEND_A_OUTPUT, "Send A");
    192 		configOutput(SEND_B_OUTPUT, "Send B");
    193 
    194 		_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]);
    195 		_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]);
    196 		_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]);
    197 		_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]);
    198 		_channels[4] = new MixerExpanderChannel(params[LOW5_PARAM], params[MID5_PARAM], params[HIGH5_PARAM], params[A5_PARAM], params[B5_PARAM], params[PRE_A5_PARAM], params[PRE_B5_PARAM], inputs[A5_INPUT], inputs[B5_INPUT]);
    199 		_channels[5] = new MixerExpanderChannel(params[LOW6_PARAM], params[MID6_PARAM], params[HIGH6_PARAM], params[A6_PARAM], params[B6_PARAM], params[PRE_A6_PARAM], params[PRE_B6_PARAM], inputs[A6_INPUT], inputs[B6_INPUT]);
    200 		_channels[6] = new MixerExpanderChannel(params[LOW7_PARAM], params[MID7_PARAM], params[HIGH7_PARAM], params[A7_PARAM], params[B7_PARAM], params[PRE_A7_PARAM], params[PRE_B7_PARAM], inputs[A7_INPUT], inputs[B7_INPUT]);
    201 		_channels[7] = new MixerExpanderChannel(params[LOW8_PARAM], params[MID8_PARAM], params[HIGH8_PARAM], params[A8_PARAM], params[B8_PARAM], params[PRE_A8_PARAM], params[PRE_B8_PARAM], inputs[A8_INPUT], inputs[B8_INPUT]);
    202 
    203 		setBaseModelPredicate([](Model* m) { return m == modelMix8; });
    204 	}
    205 	virtual ~Mix8x() {
    206 		for (int i = 0; i < 8; ++i) {
    207 			delete _channels[i];
    208 		}
    209 	}
    210 
    211 	void sampleRateChange() override;
    212 	void modulate() override;
    213 	void processAll(const ProcessArgs& args) override;
    214 };
    215 
    216 } // namespace bogaudio