|
-
- #include "SampleHold.hpp"
-
- void SampleHold::onReset() {
- _trigger1.reset();
- _value1 = 0.0;
- _trigger2.reset();
- _value1 = 0.0;
- }
-
- void SampleHold::step() {
- step(
- params[TRIGGER1_PARAM],
- inputs[TRIGGER1_INPUT],
- inputs[IN1_INPUT],
- outputs[OUT1_OUTPUT],
- _trigger1,
- _value1
- );
-
- step(
- params[TRIGGER2_PARAM],
- inputs[TRIGGER2_INPUT],
- inputs[IN2_INPUT],
- outputs[OUT2_OUTPUT],
- _trigger2,
- _value2
- );
- }
-
- void SampleHold::step(
- Param& triggerParam,
- Input& triggerInput,
- Input& in,
- Output& out,
- SchmittTrigger& trigger,
- float& value
- ) {
- if (trigger.process(triggerParam.value + triggerInput.value)) {
- if (in.active) {
- value = in.value;
- }
- else {
- value = abs(_noise.next()) * 10.0;
- }
- }
- out.value = value;
- }
-
- struct SampleHoldWidget : ModuleWidget {
- static constexpr int hp = 3;
-
- SampleHoldWidget(SampleHold* 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/SampleHold.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 trigger1ParamPosition = Vec(13.5, 36.0);
- auto trigger2ParamPosition = Vec(13.5, 195.0);
-
- auto trigger1InputPosition = Vec(10.5, 58.0);
- auto in1InputPosition = Vec(10.5, 95.0);
- auto trigger2InputPosition = Vec(10.5, 217.0);
- auto in2InputPosition = Vec(10.5, 254.0);
-
- auto out1OutputPosition = Vec(10.5, 133.0);
- auto out2OutputPosition = Vec(10.5, 292.0);
- // end generated by svg_widgets.rb
-
- addParam(ParamWidget::create<Button18>(trigger1ParamPosition, module, SampleHold::TRIGGER1_PARAM, 0.0, 1.0, 0.0));
- addParam(ParamWidget::create<Button18>(trigger2ParamPosition, module, SampleHold::TRIGGER2_PARAM, 0.0, 1.0, 0.0));
-
- addInput(Port::create<Port24>(trigger1InputPosition, Port::INPUT, module, SampleHold::TRIGGER1_INPUT));
- addInput(Port::create<Port24>(in1InputPosition, Port::INPUT, module, SampleHold::IN1_INPUT));
- addInput(Port::create<Port24>(trigger2InputPosition, Port::INPUT, module, SampleHold::TRIGGER2_INPUT));
- addInput(Port::create<Port24>(in2InputPosition, Port::INPUT, module, SampleHold::IN2_INPUT));
-
- addOutput(Port::create<Port24>(out1OutputPosition, Port::OUTPUT, module, SampleHold::OUT1_OUTPUT));
- addOutput(Port::create<Port24>(out2OutputPosition, Port::OUTPUT, module, SampleHold::OUT2_OUTPUT));
- }
- };
-
- RACK_PLUGIN_MODEL_INIT(Bogaudio, SampleHold) {
- Model *modelSampleHold = createModel<SampleHold, SampleHoldWidget>("Bogaudio-SampleHold", "S&H", "dual sample and hold", SAMPLE_AND_HOLD_TAG, DUAL_TAG);
- return modelSampleHold;
- }
|