Manual.cpp (3535B)
1 2 #include "Manual.hpp" 3 4 #define OUTPUT_SCALE "output_scale" 5 6 void Manual::reset() { 7 _trigger.reset(); 8 _pulse.process(10.0f); 9 } 10 11 void Manual::sampleRateChange() { 12 _sampleTime = APP->engine->getSampleTime(); 13 } 14 15 json_t* Manual::saveToJson(json_t* root) { 16 root = TriggerOnLoadModule::saveToJson(root); 17 json_object_set_new(root, OUTPUT_SCALE, json_real(_outputScale)); 18 return root; 19 } 20 21 void Manual::loadFromJson(json_t* root) { 22 TriggerOnLoadModule::loadFromJson(root); 23 json_t* os = json_object_get(root, OUTPUT_SCALE); 24 if (os) { 25 _outputScale = json_real_value(os); 26 } 27 } 28 29 void Manual::processAll(const ProcessArgs& args) { 30 bool initialPulse = false; 31 if (_initialDelay && !_initialDelay->next()) { 32 initialPulse = true; 33 delete _initialDelay; 34 _initialDelay = NULL; 35 } 36 37 bool high = _trigger.process(params[TRIGGER_PARAM].getValue()) || _trigger.isHigh() || (initialPulse && _triggerOnLoad && _shouldTriggerOnLoad); 38 if (high) { 39 _pulse.trigger(0.001f); 40 } 41 high = _pulse.process(_sampleTime); 42 43 float out = high ? (5.0f * _outputScale) : 0.0f; 44 outputs[OUT1_OUTPUT].setVoltage(out); 45 outputs[OUT2_OUTPUT].setVoltage(out); 46 outputs[OUT3_OUTPUT].setVoltage(out); 47 outputs[OUT4_OUTPUT].setVoltage(out); 48 outputs[OUT5_OUTPUT].setVoltage(out); 49 outputs[OUT6_OUTPUT].setVoltage(out); 50 outputs[OUT7_OUTPUT].setVoltage(out); 51 outputs[OUT8_OUTPUT].setVoltage(out); 52 } 53 54 struct ManualWidget : TriggerOnLoadModuleWidget { 55 static constexpr int hp = 3; 56 57 ManualWidget(Manual* module) 58 : TriggerOnLoadModuleWidget("Trigger on load") 59 { 60 setModule(module); 61 box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT); 62 setPanel(box.size, "Manual"); 63 createScrews(); 64 65 // generated by svg_widgets.rb 66 auto triggerParamPosition = Vec(13.5, 22.0); 67 68 auto out1OutputPosition = Vec(10.5, 57.0); 69 auto out2OutputPosition = Vec(10.5, 87.0); 70 auto out3OutputPosition = Vec(10.5, 117.0); 71 auto out4OutputPosition = Vec(10.5, 147.0); 72 auto out5OutputPosition = Vec(10.5, 177.0); 73 auto out6OutputPosition = Vec(10.5, 207.0); 74 auto out7OutputPosition = Vec(10.5, 237.0); 75 auto out8OutputPosition = Vec(10.5, 267.0); 76 // end generated by svg_widgets.rb 77 78 addParam(createParam<Button18>(triggerParamPosition, module, Manual::TRIGGER_PARAM)); 79 80 addOutput(createOutput<Port24>(out1OutputPosition, module, Manual::OUT1_OUTPUT)); 81 addOutput(createOutput<Port24>(out2OutputPosition, module, Manual::OUT2_OUTPUT)); 82 addOutput(createOutput<Port24>(out3OutputPosition, module, Manual::OUT3_OUTPUT)); 83 addOutput(createOutput<Port24>(out4OutputPosition, module, Manual::OUT4_OUTPUT)); 84 addOutput(createOutput<Port24>(out5OutputPosition, module, Manual::OUT5_OUTPUT)); 85 addOutput(createOutput<Port24>(out6OutputPosition, module, Manual::OUT6_OUTPUT)); 86 addOutput(createOutput<Port24>(out7OutputPosition, module, Manual::OUT7_OUTPUT)); 87 addOutput(createOutput<Port24>(out8OutputPosition, module, Manual::OUT8_OUTPUT)); 88 } 89 90 void contextMenu(Menu* menu) override { 91 TriggerOnLoadModuleWidget::contextMenu(menu); 92 93 auto m = dynamic_cast<Manual*>(module); 94 assert(m); 95 96 OptionsMenuItem* o = new OptionsMenuItem("Output"); 97 o->addItem(OptionMenuItem("+5V", [m]() { return m->_outputScale == 1.0f; }, [m]() { m->_outputScale = 1.0f; })); 98 o->addItem(OptionMenuItem("+10V", [m]() { return m->_outputScale == 2.0f; }, [m]() { m->_outputScale = 2.0f; })); 99 OptionsMenuItem::addToMenu(o, menu); 100 } 101 }; 102 103 Model* modelManual = bogaudio::createModel<Manual, ManualWidget>("Bogaudio-Manual", "MANUAL", "Button controlled gates / triggers", "Controller");