PolyCon8.cpp (3657B)
1 2 #include "PolyCon8.hpp" 3 4 void PolyCon8::processAll(const ProcessArgs& args) { 5 int cn = clamp(_polyChannels, 1, 8); 6 7 outputs[OUT_OUTPUT].setChannels(cn); 8 for (int c = 0; c < cn; ++c) { 9 float out = clamp(params[CHANNEL1_PARAM + c].getValue(), -1.0f, 1.0f); 10 out += _rangeOffset; 11 out *= _rangeScale; 12 outputs[OUT_OUTPUT].setVoltage(out, c); 13 lights[CHANNEL1_LIGHT + c].value = 1.0f; 14 } 15 for (int c = cn; c < 8; ++c) { 16 lights[CHANNEL1_LIGHT + c].value = 0.0f; 17 } 18 } 19 20 struct PolyCon8Widget : BGModuleWidget { 21 static constexpr int hp = 3; 22 23 PolyCon8Widget(PolyCon8* module) { 24 setModule(module); 25 box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT); 26 setPanel(box.size, "PolyCon8"); 27 createScrews(); 28 29 // generated by svg_widgets.rb 30 auto channel1ParamPosition = Vec(14.5, 24.0); 31 auto channel2ParamPosition = Vec(14.5, 55.5); 32 auto channel3ParamPosition = Vec(14.5, 87.0); 33 auto channel4ParamPosition = Vec(14.5, 118.5); 34 auto channel5ParamPosition = Vec(14.5, 150.0); 35 auto channel6ParamPosition = Vec(14.5, 181.5); 36 auto channel7ParamPosition = Vec(14.5, 213.0); 37 auto channel8ParamPosition = Vec(14.5, 244.5); 38 39 auto outOutputPosition = Vec(10.5, 274.0); 40 41 auto channel1LightPosition = Vec(38.5, 30.4); 42 auto channel2LightPosition = Vec(38.5, 61.9); 43 auto channel3LightPosition = Vec(38.5, 93.4); 44 auto channel4LightPosition = Vec(38.5, 124.9); 45 auto channel5LightPosition = Vec(38.5, 156.4); 46 auto channel6LightPosition = Vec(38.5, 187.9); 47 auto channel7LightPosition = Vec(38.5, 219.4); 48 auto channel8LightPosition = Vec(38.5, 250.9); 49 // end generated by svg_widgets.rb 50 51 addParam(createParam<Knob16>(channel1ParamPosition, module, PolyCon8::CHANNEL1_PARAM)); 52 addParam(createParam<Knob16>(channel2ParamPosition, module, PolyCon8::CHANNEL2_PARAM)); 53 addParam(createParam<Knob16>(channel3ParamPosition, module, PolyCon8::CHANNEL3_PARAM)); 54 addParam(createParam<Knob16>(channel4ParamPosition, module, PolyCon8::CHANNEL4_PARAM)); 55 addParam(createParam<Knob16>(channel5ParamPosition, module, PolyCon8::CHANNEL5_PARAM)); 56 addParam(createParam<Knob16>(channel6ParamPosition, module, PolyCon8::CHANNEL6_PARAM)); 57 addParam(createParam<Knob16>(channel7ParamPosition, module, PolyCon8::CHANNEL7_PARAM)); 58 addParam(createParam<Knob16>(channel8ParamPosition, module, PolyCon8::CHANNEL8_PARAM)); 59 60 addOutput(createOutput<Port24>(outOutputPosition, module, PolyCon8::OUT_OUTPUT)); 61 62 addChild(createLight<BGTinyLight<GreenLight>>(channel1LightPosition, module, PolyCon8::CHANNEL1_LIGHT)); 63 addChild(createLight<BGTinyLight<GreenLight>>(channel2LightPosition, module, PolyCon8::CHANNEL2_LIGHT)); 64 addChild(createLight<BGTinyLight<GreenLight>>(channel3LightPosition, module, PolyCon8::CHANNEL3_LIGHT)); 65 addChild(createLight<BGTinyLight<GreenLight>>(channel4LightPosition, module, PolyCon8::CHANNEL4_LIGHT)); 66 addChild(createLight<BGTinyLight<GreenLight>>(channel5LightPosition, module, PolyCon8::CHANNEL5_LIGHT)); 67 addChild(createLight<BGTinyLight<GreenLight>>(channel6LightPosition, module, PolyCon8::CHANNEL6_LIGHT)); 68 addChild(createLight<BGTinyLight<GreenLight>>(channel7LightPosition, module, PolyCon8::CHANNEL7_LIGHT)); 69 addChild(createLight<BGTinyLight<GreenLight>>(channel8LightPosition, module, PolyCon8::CHANNEL8_LIGHT)); 70 } 71 72 void contextMenu(Menu* menu) override { 73 auto m = dynamic_cast<PolyCon8*>(module); 74 assert(m); 75 menu->addChild(new PolyChannelsMenuItem(m, 8)); 76 OutputRangeOptionMenuItem::addOutputRangeOptionsToMenu(module, menu); 77 } 78 }; 79 80 Model* modelPolyCon8 = createModel<PolyCon8, PolyCon8Widget>("Bogaudio-PolyCon8", "POLYCON8", "Polyphonic per-channel constant voltages", "Polyphonic");