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