BogaudioModules

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

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