PolyCon16.cpp (6484B)
1 2 #include "PolyCon16.hpp" 3 4 void PolyCon16::processAll(const ProcessArgs& args) { 5 int cn = clamp(params[CHANNELS_PARAM].getValue(), 1.0f, 16.0f); 6 if (inputs[CHANNELS_INPUT].isConnected()) { 7 cn = inputs[CHANNELS_INPUT].getChannels(); 8 } 9 10 outputs[OUT_OUTPUT].setChannels(cn); 11 for (int c = 0; c < cn; ++c) { 12 float out = clamp(params[CHANNEL1_PARAM + c].getValue(), -1.0f, 1.0f); 13 out += _rangeOffset; 14 out *= _rangeScale; 15 outputs[OUT_OUTPUT].setVoltage(out, c); 16 lights[CHANNEL1_LIGHT + c].value = 1.0f; 17 } 18 for (int c = cn; c < maxChannels; ++c) { 19 lights[CHANNEL1_LIGHT + c].value = 0.0f; 20 } 21 } 22 23 struct PolyCon16Widget : BGModuleWidget { 24 static constexpr int hp = 8; 25 26 PolyCon16Widget(PolyCon16* module) { 27 setModule(module); 28 box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT); 29 setPanel(box.size, "PolyCon16"); 30 createScrews(); 31 32 // generated by svg_widgets.rb 33 auto channel1ParamPosition = Vec(25.3, 30.2); 34 auto channel2ParamPosition = Vec(25.2, 67.2); 35 auto channel3ParamPosition = Vec(25.2, 104.2); 36 auto channel4ParamPosition = Vec(25.2, 141.2); 37 auto channel5ParamPosition = Vec(25.2, 178.2); 38 auto channel6ParamPosition = Vec(25.2, 215.2); 39 auto channel7ParamPosition = Vec(25.2, 252.2); 40 auto channel8ParamPosition = Vec(25.2, 289.2); 41 auto channel9ParamPosition = Vec(75.2, 30.2); 42 auto channel10ParamPosition = Vec(75.2, 67.2); 43 auto channel11ParamPosition = Vec(75.2, 104.2); 44 auto channel12ParamPosition = Vec(75.2, 141.2); 45 auto channel13ParamPosition = Vec(75.2, 178.2); 46 auto channel14ParamPosition = Vec(75.2, 215.2); 47 auto channel15ParamPosition = Vec(75.2, 252.2); 48 auto channel16ParamPosition = Vec(75.2, 289.2); 49 auto channelsParamPosition = Vec(23.0, 332.0); 50 51 auto channelsInputPosition = Vec(55.5, 322.0); 52 53 auto outOutputPosition = Vec(86.5, 322.0); 54 55 auto channel1LightPosition = Vec(33.75, 52.0); 56 auto channel2LightPosition = Vec(33.75, 89.0); 57 auto channel3LightPosition = Vec(33.75, 126.0); 58 auto channel4LightPosition = Vec(33.75, 163.0); 59 auto channel5LightPosition = Vec(33.75, 200.0); 60 auto channel6LightPosition = Vec(33.75, 237.0); 61 auto channel7LightPosition = Vec(33.75, 274.0); 62 auto channel8LightPosition = Vec(33.75, 311.0); 63 auto channel9LightPosition = Vec(83.75, 52.0); 64 auto channel10LightPosition = Vec(83.75, 89.0); 65 auto channel11LightPosition = Vec(83.75, 126.0); 66 auto channel12LightPosition = Vec(83.75, 163.0); 67 auto channel13LightPosition = Vec(83.75, 200.0); 68 auto channel14LightPosition = Vec(83.75, 237.0); 69 auto channel15LightPosition = Vec(83.75, 274.0); 70 auto channel16LightPosition = Vec(83.75, 311.0); 71 // end generated by svg_widgets.rb 72 73 addParam(createParam<Knob16>(channelsParamPosition, module, PolyCon16::CHANNELS_PARAM)); 74 addParam(createParam<Knob19>(channel1ParamPosition, module, PolyCon16::CHANNEL1_PARAM)); 75 addParam(createParam<Knob19>(channel2ParamPosition, module, PolyCon16::CHANNEL2_PARAM)); 76 addParam(createParam<Knob19>(channel3ParamPosition, module, PolyCon16::CHANNEL3_PARAM)); 77 addParam(createParam<Knob19>(channel4ParamPosition, module, PolyCon16::CHANNEL4_PARAM)); 78 addParam(createParam<Knob19>(channel5ParamPosition, module, PolyCon16::CHANNEL5_PARAM)); 79 addParam(createParam<Knob19>(channel6ParamPosition, module, PolyCon16::CHANNEL6_PARAM)); 80 addParam(createParam<Knob19>(channel7ParamPosition, module, PolyCon16::CHANNEL7_PARAM)); 81 addParam(createParam<Knob19>(channel8ParamPosition, module, PolyCon16::CHANNEL8_PARAM)); 82 addParam(createParam<Knob19>(channel9ParamPosition, module, PolyCon16::CHANNEL9_PARAM)); 83 addParam(createParam<Knob19>(channel10ParamPosition, module, PolyCon16::CHANNEL10_PARAM)); 84 addParam(createParam<Knob19>(channel11ParamPosition, module, PolyCon16::CHANNEL11_PARAM)); 85 addParam(createParam<Knob19>(channel12ParamPosition, module, PolyCon16::CHANNEL12_PARAM)); 86 addParam(createParam<Knob19>(channel13ParamPosition, module, PolyCon16::CHANNEL13_PARAM)); 87 addParam(createParam<Knob19>(channel14ParamPosition, module, PolyCon16::CHANNEL14_PARAM)); 88 addParam(createParam<Knob19>(channel15ParamPosition, module, PolyCon16::CHANNEL15_PARAM)); 89 addParam(createParam<Knob19>(channel16ParamPosition, module, PolyCon16::CHANNEL16_PARAM)); 90 91 addInput(createInput<Port24>(channelsInputPosition, module, PolyCon16::CHANNELS_INPUT)); 92 93 addOutput(createOutput<Port24>(outOutputPosition, module, PolyCon16::OUT_OUTPUT)); 94 95 addChild(createLight<BGTinyLight<GreenLight>>(channel1LightPosition, module, PolyCon16::CHANNEL1_LIGHT)); 96 addChild(createLight<BGTinyLight<GreenLight>>(channel2LightPosition, module, PolyCon16::CHANNEL2_LIGHT)); 97 addChild(createLight<BGTinyLight<GreenLight>>(channel3LightPosition, module, PolyCon16::CHANNEL3_LIGHT)); 98 addChild(createLight<BGTinyLight<GreenLight>>(channel4LightPosition, module, PolyCon16::CHANNEL4_LIGHT)); 99 addChild(createLight<BGTinyLight<GreenLight>>(channel5LightPosition, module, PolyCon16::CHANNEL5_LIGHT)); 100 addChild(createLight<BGTinyLight<GreenLight>>(channel6LightPosition, module, PolyCon16::CHANNEL6_LIGHT)); 101 addChild(createLight<BGTinyLight<GreenLight>>(channel7LightPosition, module, PolyCon16::CHANNEL7_LIGHT)); 102 addChild(createLight<BGTinyLight<GreenLight>>(channel8LightPosition, module, PolyCon16::CHANNEL8_LIGHT)); 103 addChild(createLight<BGTinyLight<GreenLight>>(channel9LightPosition, module, PolyCon16::CHANNEL9_LIGHT)); 104 addChild(createLight<BGTinyLight<GreenLight>>(channel10LightPosition, module, PolyCon16::CHANNEL10_LIGHT)); 105 addChild(createLight<BGTinyLight<GreenLight>>(channel11LightPosition, module, PolyCon16::CHANNEL11_LIGHT)); 106 addChild(createLight<BGTinyLight<GreenLight>>(channel12LightPosition, module, PolyCon16::CHANNEL12_LIGHT)); 107 addChild(createLight<BGTinyLight<GreenLight>>(channel13LightPosition, module, PolyCon16::CHANNEL13_LIGHT)); 108 addChild(createLight<BGTinyLight<GreenLight>>(channel14LightPosition, module, PolyCon16::CHANNEL14_LIGHT)); 109 addChild(createLight<BGTinyLight<GreenLight>>(channel15LightPosition, module, PolyCon16::CHANNEL15_LIGHT)); 110 addChild(createLight<BGTinyLight<GreenLight>>(channel16LightPosition, module, PolyCon16::CHANNEL16_LIGHT)); 111 } 112 113 void contextMenu(Menu* menu) override { 114 OutputRangeOptionMenuItem::addOutputRangeOptionsToMenu(module, menu); 115 } 116 }; 117 118 // Note slug is "Bogaudio-PolyCon" for backwards compatibility. 119 Model* modelPolyCon16 = createModel<PolyCon16, PolyCon16Widget>("Bogaudio-PolyCon", "POLYCON16", "Polyphonic per-channel constant voltages", "Polyphonic");