PolyMult.cpp (2195B)
1 2 #include "PolyMult.hpp" 3 4 void PolyMult::processAll(const ProcessArgs& args) { 5 int cn = clamp(params[CHANNELS_PARAM].getValue(), 1.0f, 16.0f); 6 if (inputs[CHANNELS_INPUT].isConnected()) { 7 int channels = inputs[CHANNELS_INPUT].getChannels(); 8 if (channels == 1) { 9 cn = clamp(roundf(inputs[CHANNELS_INPUT].getVoltage() / 10.0f * cn), 1.0f, 16.0f); 10 } 11 else { 12 cn = channels; 13 } 14 } 15 16 float out = inputs[IN_INPUT].getVoltage(); 17 outputs[OUT1_OUTPUT].setChannels(cn); 18 outputs[OUT2_OUTPUT].setChannels(cn); 19 outputs[OUT3_OUTPUT].setChannels(cn); 20 outputs[OUT4_OUTPUT].setChannels(cn); 21 for (int c = 0; c < cn; ++c) { 22 outputs[OUT1_OUTPUT].setVoltage(out, c); 23 outputs[OUT2_OUTPUT].setVoltage(out, c); 24 outputs[OUT3_OUTPUT].setVoltage(out, c); 25 outputs[OUT4_OUTPUT].setVoltage(out, c); 26 } 27 } 28 29 struct PolyMultWidget : BGModuleWidget { 30 static constexpr int hp = 3; 31 32 PolyMultWidget(PolyMult* module) { 33 setModule(module); 34 box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT); 35 setPanel(box.size, "PolyMult"); 36 createScrews(); 37 38 // generated by svg_widgets.rb 39 auto channelsParamPosition = Vec(14.5, 42.0); 40 41 auto channelsInputPosition = Vec(10.5, 73.0); 42 auto inInputPosition = Vec(10.5, 109.0); 43 44 auto out1OutputPosition = Vec(10.5, 147.0); 45 auto out2OutputPosition = Vec(10.5, 182.0); 46 auto out3OutputPosition = Vec(10.5, 217.0); 47 auto out4OutputPosition = Vec(10.5, 252.0); 48 // end generated by svg_widgets.rb 49 50 addParam(createParam<Knob16>(channelsParamPosition, module, PolyMult::CHANNELS_PARAM)); 51 52 addInput(createInput<Port24>(channelsInputPosition, module, PolyMult::CHANNELS_INPUT)); 53 addInput(createInput<Port24>(inInputPosition, module, PolyMult::IN_INPUT)); 54 55 addOutput(createOutput<Port24>(out1OutputPosition, module, PolyMult::OUT1_OUTPUT)); 56 addOutput(createOutput<Port24>(out2OutputPosition, module, PolyMult::OUT2_OUTPUT)); 57 addOutput(createOutput<Port24>(out3OutputPosition, module, PolyMult::OUT3_OUTPUT)); 58 addOutput(createOutput<Port24>(out4OutputPosition, module, PolyMult::OUT4_OUTPUT)); 59 } 60 }; 61 62 Model* modelPolyMult = createModel<PolyMult, PolyMultWidget>("Bogaudio-PolyMult", "POLYMULT", "Monophonic-to-polyphonic multiple", "Polyphonic");