BogaudioModules

BogaudioModules for VCV Rack
Log | Files | Refs | README | LICENSE

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");