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