Mix1.cpp (2381B)
1 2 #include "Mix1.hpp" 3 4 void Mix1::sampleRateChange() { 5 float sr = APP->engine->getSampleRate(); 6 for (int c = 0; c < _channels; ++c) { 7 _engines[c]->setSampleRate(sr); 8 } 9 } 10 11 bool Mix1::active() { 12 return outputs[OUT_OUTPUT].isConnected(); 13 } 14 15 int Mix1::channels() { 16 return inputs[IN_INPUT].getChannels(); 17 } 18 19 void Mix1::addChannel(int c) { 20 _engines[c] = new MixerChannel( 21 params[LEVEL_PARAM], 22 params[MUTE_PARAM], 23 inputs[LEVEL_INPUT], 24 1000.0f, 25 &inputs[MUTE_INPUT] 26 ); 27 _engines[c]->setSampleRate(APP->engine->getSampleRate()); 28 } 29 30 void Mix1::removeChannel(int c) { 31 delete _engines[c]; 32 _engines[c] = NULL; 33 } 34 35 void Mix1::processAlways(const ProcessArgs& args) { 36 _rmsSum = 0.0f; 37 } 38 39 void Mix1::processChannel(const ProcessArgs& args, int c) { 40 MixerChannel& e = *_engines[c]; 41 e.next(inputs[IN_INPUT].getVoltage(c), false, c, _linearCV); 42 _rmsSum += e.rms; 43 outputs[OUT_OUTPUT].setChannels(_channels); 44 outputs[OUT_OUTPUT].setVoltage(e.out, c); 45 } 46 47 void Mix1::postProcessAlways(const ProcessArgs& args) { 48 _rms = _rmsSum * _inverseChannels; 49 } 50 51 struct Mix1Widget : LinearCVMixerWidget { 52 static constexpr int hp = 3; 53 54 Mix1Widget(Mix1* module) { 55 setModule(module); 56 box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT); 57 setPanel(box.size, "Mix1"); 58 createScrews(); 59 60 // generated by svg_widgets.rb 61 auto levelParamPosition = Vec(13.5, 18.0); 62 auto muteParamPosition = Vec(13.5, 176.0); 63 64 auto muteInputPosition = Vec(10.5, 198.0); 65 auto levelInputPosition = Vec(10.5, 233.0); 66 auto inInputPosition = Vec(10.5, 268.0); 67 68 auto outOutputPosition = Vec(10.5, 306.0); 69 // end generated by svg_widgets.rb 70 71 { 72 auto slider = createParam<VUSlider151>(levelParamPosition, module, Mix1::LEVEL_PARAM); 73 if (module) { 74 dynamic_cast<VUSlider*>(slider)->setVULevel(&module->_rms); 75 } 76 addParam(slider); 77 } 78 addParam(createParam<MuteButton>(muteParamPosition, module, Mix1::MUTE_PARAM)); 79 80 addInput(createInput<Port24>(muteInputPosition, module, Mix1::MUTE_INPUT)); 81 addInput(createInput<Port24>(levelInputPosition, module, Mix1::LEVEL_INPUT)); 82 addInput(createInput<Port24>(inInputPosition, module, Mix1::IN_INPUT)); 83 84 addOutput(createOutput<Port24>(outOutputPosition, module, Mix1::OUT_OUTPUT)); 85 } 86 }; 87 88 Model* modelMix1 = bogaudio::createModel<Mix1, Mix1Widget>("Bogaudio-Mix1", "MIX1", "Fader/amplifier with CV-controllable mute", "VCA", "Polyphonic");