BogaudioModules

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

commit ee8ec9ae8ae8c5e6bae7414a16c8e6932d7308c1
parent 2a8afe48434d7a51f11e7f358f54c8390da2bdf3
Author: Matt Demanett <matt@demanett.net>
Date:   Wed,  4 Sep 2019 22:54:20 -0400

Factor channel processing in S&H.

Diffstat:
Msrc/SampleHold.cpp | 64++++++++++++++++++++++++++++++++++++++++------------------------
Msrc/SampleHold.hpp | 14++++++++++++--
2 files changed, 52 insertions(+), 26 deletions(-)

diff --git a/src/SampleHold.cpp b/src/SampleHold.cpp @@ -38,33 +38,49 @@ void SampleHold::dataFromJson(json_t* root) { } void SampleHold::process(const ProcessArgs& args) { - { - lights[TRACK1_LIGHT].value = params[TRACK1_PARAM].getValue(); - bool triggered = _trigger1.process(params[TRIGGER1_PARAM].getValue() + inputs[TRIGGER1_INPUT].getVoltage()); - if (params[TRACK1_PARAM].getValue() > 0.5f ? _trigger1.isHigh() : triggered) { - if (inputs[IN1_INPUT].isConnected()) { - _value1 = inputs[IN1_INPUT].getVoltage(); - } - else { - _value1 = (noise() + _rangeOffset) * _rangeScale; - } - } - outputs[OUT1_OUTPUT].setVoltage(_value1); - } + processChannel( + lights[TRACK1_LIGHT], + params[TRACK1_PARAM], + _trigger1, + params[TRIGGER1_PARAM], + inputs[TRIGGER1_INPUT], + inputs[IN1_INPUT], + _value1, + outputs[OUT1_OUTPUT] + ); + processChannel( + lights[TRACK2_LIGHT], + params[TRACK2_PARAM], + _trigger2, + params[TRIGGER2_PARAM], + inputs[TRIGGER2_INPUT], + inputs[IN2_INPUT], + _value2, + outputs[OUT2_OUTPUT] + ); +} - { - lights[TRACK2_LIGHT].value = params[TRACK2_PARAM].getValue(); - bool triggered = _trigger2.process(params[TRIGGER2_PARAM].getValue() + inputs[TRIGGER2_INPUT].getVoltage()); - if (params[TRACK2_PARAM].getValue() > 0.5f ? _trigger2.isHigh() : triggered) { - if (inputs[IN2_INPUT].isConnected()) { - _value2 = inputs[IN2_INPUT].getVoltage(); - } - else { - _value2 = (noise() + _rangeOffset) * _rangeScale; - } +void SampleHold::processChannel( + Light& trackLight, + Param& trackParam, + Trigger& trigger, + Param& triggerParam, + Input& triggerInput, + Input& in, + float& value, + Output& out +) { + trackLight.value = trackParam.getValue(); + bool triggered = trigger.process(triggerParam.getValue() + triggerInput.getVoltage()); + if (trackParam.getValue() > 0.5f ? trigger.isHigh() : triggered) { + if (in.isConnected()) { + value = in.getVoltage(); + } + else { + value = (noise() + _rangeOffset) * _rangeScale; } - outputs[OUT2_OUTPUT].setVoltage(_value2); } + out.setVoltage(value); } float SampleHold::noise() { diff --git a/src/SampleHold.hpp b/src/SampleHold.hpp @@ -60,8 +60,8 @@ struct SampleHold : Module { , _value2(0.0f) { config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); - configParam(TRIGGER1_PARAM, 0.0f, 1.0f, 0.0f, "Trigger 1"); - configParam(TRIGGER2_PARAM, 0.0f, 1.0f, 0.0f, "Trigger 2"); + configParam(TRIGGER1_PARAM, 0.0f, 10.0f, 0.0f, "Trigger 1"); + configParam(TRIGGER2_PARAM, 0.0f, 10.0f, 0.0f, "Trigger 2"); configParam(TRACK1_PARAM, 0.0f, 1.0f, 0.0f, "Track 1"); configParam(TRACK2_PARAM, 0.0f, 1.0f, 0.0f, "Track 2"); @@ -72,6 +72,16 @@ struct SampleHold : Module { json_t* dataToJson() override; void dataFromJson(json_t* root) override; void process(const ProcessArgs& args) override; + void processChannel( + Light& trackLight, + Param& trackParam, + Trigger& trigger, + Param& triggerParam, + Input& triggerInput, + Input& in, + float& value, + Output& out + ); float noise(); };