BogaudioModules

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

Bool.cpp (2066B)


      1 
      2 #include "Bool.hpp"
      3 
      4 void Bool::processAll(const ProcessArgs& args) {
      5 	for (int i = 0, cn = std::max(1, inputs[A_INPUT].getChannels()); i < cn; ++i) {
      6 		bool a = inputs[A_INPUT].getPolyVoltage(i) > 1.0f;
      7 		bool b = inputs[B_INPUT].getPolyVoltage(i) > 1.0f;
      8 		outputs[AND_OUTPUT].setChannels(cn);
      9 		outputs[AND_OUTPUT].setVoltage(5.0f * (a && b), i);
     10 		outputs[OR_OUTPUT].setChannels(cn);
     11 		outputs[OR_OUTPUT].setVoltage(5.0f * (a || b), i);
     12 		outputs[XOR_OUTPUT].setChannels(cn);
     13 		outputs[XOR_OUTPUT].setVoltage(5.0f * (a ^ b), i);
     14 	}
     15 
     16 	int cn = std::max(1, inputs[NOT_INPUT].getChannels());
     17 	outputs[NOT_OUTPUT].setChannels(cn);
     18 	for (int i = 0; i < cn; ++i) {
     19 		outputs[NOT_OUTPUT].setVoltage(5.0f * (inputs[NOT_INPUT].isConnected() && inputs[NOT_INPUT].getPolyVoltage(i) < 1.0f), i);
     20 	}
     21 }
     22 
     23 struct BoolWidget : BGModuleWidget {
     24 	static constexpr int hp = 3;
     25 
     26 	BoolWidget(Bool* module) {
     27 		setModule(module);
     28 		box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT);
     29 		setPanel(box.size, "Bool");
     30 		createScrews();
     31 
     32 		// generated by svg_widgets.rb
     33 		auto aInputPosition = Vec(10.5, 23.0);
     34 		auto bInputPosition = Vec(10.5, 53.0);
     35 		auto notInputPosition = Vec(10.5, 221.0);
     36 
     37 		auto andOutputPosition = Vec(10.5, 86.0);
     38 		auto orOutputPosition = Vec(10.5, 126.0);
     39 		auto xorOutputPosition = Vec(10.5, 166.0);
     40 		auto notOutputPosition = Vec(10.5, 254.0);
     41 		// end generated by svg_widgets.rb
     42 
     43 		addInput(createInput<Port24>(aInputPosition, module, Bool::A_INPUT));
     44 		addInput(createInput<Port24>(bInputPosition, module, Bool::B_INPUT));
     45 		addInput(createInput<Port24>(notInputPosition, module, Bool::NOT_INPUT));
     46 
     47 		addOutput(createOutput<Port24>(andOutputPosition, module, Bool::AND_OUTPUT));
     48 		addOutput(createOutput<Port24>(orOutputPosition, module, Bool::OR_OUTPUT));
     49 		addOutput(createOutput<Port24>(xorOutputPosition, module, Bool::XOR_OUTPUT));
     50 		addOutput(createOutput<Port24>(notOutputPosition, module, Bool::NOT_OUTPUT));
     51 	}
     52 };
     53 
     54 Model* modelBool = bogaudio::createModel<Bool, BoolWidget>("Bogaudio-Bool", "BOOL", "Boolean logic", "Logic", "Polyphonic");