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:
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();
};