BogaudioModules

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

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