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