|
-
- #include "AddrSeq.hpp"
-
- void AddrSeq::onReset() {
- _step = 0;
- _clock.reset();
- _reset.reset();
- }
-
- void AddrSeq::step() {
- int steps = clamp(params[STEPS_PARAM].value, 2.0f, 8.0f);
- int reverse = 1 - 2 * (params[DIRECTION_PARAM].value == 0.0f);
- _step = (_step + reverse * _clock.process(inputs[CLOCK_INPUT].value)) % steps;
- _step += (_step < 0) * steps;
- _step -= _step * _reset.process(inputs[RESET_INPUT].value);
- int step = _step + (int)params[SELECT_PARAM].value;
- step += (int)(clamp(inputs[SELECT_INPUT].value, 0.0f, 10.0f) * 0.1f * 8.0f);
- step = step % 8;
-
- float out = 0.0f;
- for (int i = 0; i < 8; ++i) {
- out += params[OUT1_PARAM + i].value * (step == i);
- lights[OUT1_LIGHT + i].value = step == i;
- }
- outputs[OUT_OUTPUT].value = out * 10.0f;
- }
-
- struct AddrSeqWidget : ModuleWidget {
- static constexpr int hp = 6;
-
- AddrSeqWidget(AddrSeq* module) : ModuleWidget(module) {
- box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT);
-
- {
- SVGPanel *panel = new SVGPanel();
- panel->box.size = box.size;
- panel->setBackground(SVG::load(assetPlugin(plugin, "res/AddrSeq.svg")));
- addChild(panel);
- }
-
- addChild(Widget::create<ScrewSilver>(Vec(0, 0)));
- addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 15, 365)));
-
- // generated by svg_widgets.rb
- auto stepsParamPosition = Vec(15.5, 131.5);
- auto directionParamPosition = Vec(16.0, 167.5);
- auto selectParamPosition = Vec(9.0, 230.0);
- auto out1ParamPosition = Vec(58.5, 36.0);
- auto out2ParamPosition = Vec(58.5, 77.3);
- auto out3ParamPosition = Vec(58.5, 118.6);
- auto out4ParamPosition = Vec(58.5, 159.9);
- auto out5ParamPosition = Vec(58.5, 201.1);
- auto out6ParamPosition = Vec(58.5, 242.4);
- auto out7ParamPosition = Vec(58.5, 283.7);
- auto out8ParamPosition = Vec(58.5, 325.0);
-
- auto clockInputPosition = Vec(11.5, 35.0);
- auto resetInputPosition = Vec(11.5, 72.0);
- auto selectInputPosition = Vec(11.5, 270.0);
-
- auto outOutputPosition = Vec(11.5, 324.0);
-
- auto out1LightPosition = Vec(66.5, 58.5);
- auto out2LightPosition = Vec(66.5, 99.8);
- auto out3LightPosition = Vec(66.5, 141.1);
- auto out4LightPosition = Vec(66.5, 182.4);
- auto out5LightPosition = Vec(66.5, 223.6);
- auto out6LightPosition = Vec(66.5, 264.9);
- auto out7LightPosition = Vec(66.5, 306.2);
- auto out8LightPosition = Vec(66.5, 347.5);
- // end generated by svg_widgets.rb
-
- {
- auto w = ParamWidget::create<Knob16>(stepsParamPosition, module, AddrSeq::STEPS_PARAM, 2.0, 8.0, 8.0);
- dynamic_cast<Knob*>(w)->snap = true;
- addParam(w);
- }
- addParam(ParamWidget::create<SliderSwitch2State14>(directionParamPosition, module, AddrSeq::DIRECTION_PARAM, 0.0, 1.0, 1.0));
- {
- auto w = ParamWidget::create<Knob29>(selectParamPosition, module, AddrSeq::SELECT_PARAM, 0.0, 7.0, 0.0);
- dynamic_cast<Knob*>(w)->snap = true;
- addParam(w);
- }
- addParam(ParamWidget::create<Knob16>(out1ParamPosition, module, AddrSeq::OUT1_PARAM, -1.0, 1.0, 0.0));
- addParam(ParamWidget::create<Knob16>(out2ParamPosition, module, AddrSeq::OUT2_PARAM, -1.0, 1.0, 0.0));
- addParam(ParamWidget::create<Knob16>(out3ParamPosition, module, AddrSeq::OUT3_PARAM, -1.0, 1.0, 0.0));
- addParam(ParamWidget::create<Knob16>(out4ParamPosition, module, AddrSeq::OUT4_PARAM, -1.0, 1.0, 0.0));
- addParam(ParamWidget::create<Knob16>(out5ParamPosition, module, AddrSeq::OUT5_PARAM, -1.0, 1.0, 0.0));
- addParam(ParamWidget::create<Knob16>(out6ParamPosition, module, AddrSeq::OUT6_PARAM, -1.0, 1.0, 0.0));
- addParam(ParamWidget::create<Knob16>(out7ParamPosition, module, AddrSeq::OUT7_PARAM, -1.0, 1.0, 0.0));
- addParam(ParamWidget::create<Knob16>(out8ParamPosition, module, AddrSeq::OUT8_PARAM, -1.0, 1.0, 0.0));
-
- addInput(Port::create<Port24>(clockInputPosition, Port::INPUT, module, AddrSeq::CLOCK_INPUT));
- addInput(Port::create<Port24>(resetInputPosition, Port::INPUT, module, AddrSeq::RESET_INPUT));
- addInput(Port::create<Port24>(selectInputPosition, Port::INPUT, module, AddrSeq::SELECT_INPUT));
-
- addOutput(Port::create<Port24>(outOutputPosition, Port::OUTPUT, module, AddrSeq::OUT_OUTPUT));
-
- addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(out1LightPosition, module, AddrSeq::OUT1_LIGHT));
- addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(out2LightPosition, module, AddrSeq::OUT2_LIGHT));
- addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(out3LightPosition, module, AddrSeq::OUT3_LIGHT));
- addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(out4LightPosition, module, AddrSeq::OUT4_LIGHT));
- addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(out5LightPosition, module, AddrSeq::OUT5_LIGHT));
- addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(out6LightPosition, module, AddrSeq::OUT6_LIGHT));
- addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(out7LightPosition, module, AddrSeq::OUT7_LIGHT));
- addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(out8LightPosition, module, AddrSeq::OUT8_LIGHT));
- }
- };
-
- RACK_PLUGIN_MODEL_INIT(Bogaudio, AddrSeq) {
- Model* modelAddrSeq = createModel<AddrSeq, AddrSeqWidget>("Bogaudio-AddrSeq", "ADDR-SEQ", "voltage-addressable sequencer", SEQUENCER_TAG);
- return modelAddrSeq;
- }
|