BogaudioModules

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

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