From 014fce14d9b1c1f38608b7dc296fc05fb75718c7 Mon Sep 17 00:00:00 2001 From: Andrew Belt Date: Fri, 27 Oct 2017 11:42:24 -0400 Subject: [PATCH] Update Lights --- src/ABC.cpp | 25 +++++++++++++++++-------- src/DualAtenuverter.cpp | 21 ++++++++++++++------- src/Mixer.cpp | 14 +++++++++----- src/Rampage.cpp | 37 ++++++++++++++++++++----------------- src/SpringReverb.cpp | 30 ++++++++++++++++-------------- 5 files changed, 76 insertions(+), 51 deletions(-) diff --git a/src/ABC.cpp b/src/ABC.cpp index 4cad863..8d5d2ce 100644 --- a/src/ABC.cpp +++ b/src/ABC.cpp @@ -23,10 +23,15 @@ struct ABC : Module { OUT2_OUTPUT, NUM_OUTPUTS }; + enum LightIds { + OUT1_POS_LIGHT, + OUT1_NEG_LIGHT, + OUT2_POS_LIGHT, + OUT2_NEG_LIGHT, + NUM_LIGHTS + }; - float lights[2] = {}; - - ABC() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {} + ABC() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} void step() override; }; @@ -44,7 +49,7 @@ void ABC::step() { float a2 = inputs[A2_INPUT].value; float b2 = inputs[B2_INPUT].normalize(5.0) * 2.0*exponentialBipolar(80.0, params[B2_LEVEL_PARAM].value); - float c2 = inputs[C2_INPUT].normalize(20.0) * exponentialBipolar(80.0, params[C2_LEVEL_PARAM].value); + float c2 = inputs[C2_INPUT].normalize(10.0) * exponentialBipolar(80.0, params[C2_LEVEL_PARAM].value); float out2 = a2 * b2 / 5.0 + c2; // Set outputs @@ -57,8 +62,12 @@ void ABC::step() { if (outputs[OUT2_OUTPUT].active) { outputs[OUT2_OUTPUT].value = clip(out2 / 10.0) * 10.0; } - lights[0] = out1 / 5.0; - lights[1] = out2 / 5.0; + + // Lights + lights[OUT1_POS_LIGHT].value = fmaxf(0.0, out1 / 5.0); + lights[OUT1_NEG_LIGHT].value = fmaxf(0.0, -out1 / 5.0); + lights[OUT2_POS_LIGHT].value = fmaxf(0.0, out2 / 5.0); + lights[OUT2_NEG_LIGHT].value = fmaxf(0.0, -out2 / 5.0); } @@ -91,6 +100,6 @@ ABCWidget::ABCWidget() { addInput(createInput(Vec(7, 279), module, ABC::C2_INPUT)); addOutput(createOutput(Vec(7, 321), module, ABC::OUT2_OUTPUT)); - addChild(createValueLight>(Vec(38, 162), &module->lights[0])); - addChild(createValueLight>(Vec(38, 330), &module->lights[1])); + addChild(createLight>(Vec(38, 162), module, ABC::OUT1_POS_LIGHT)); + addChild(createLight>(Vec(38, 330), module, ABC::OUT2_POS_LIGHT)); } diff --git a/src/DualAtenuverter.cpp b/src/DualAtenuverter.cpp index d9dab7b..15967d5 100644 --- a/src/DualAtenuverter.cpp +++ b/src/DualAtenuverter.cpp @@ -19,10 +19,15 @@ struct DualAtenuverter : Module { OUT2_OUTPUT, NUM_OUTPUTS }; + enum LightIds { + OUT1_POS_LIGHT, + OUT1_NEG_LIGHT, + OUT2_POS_LIGHT, + OUT2_NEG_LIGHT, + NUM_LIGHTS + }; - float lights[2] = {}; - - DualAtenuverter() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {} + DualAtenuverter() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} void step() override; }; @@ -35,8 +40,10 @@ void DualAtenuverter::step() { outputs[OUT1_OUTPUT].value = out1; outputs[OUT2_OUTPUT].value = out2; - lights[0] = out1 / 5.0; - lights[1] = out2 / 5.0; + lights[OUT1_POS_LIGHT].value = fmaxf(0.0, out1 / 5.0); + lights[OUT1_NEG_LIGHT].value = fmaxf(0.0, -out1 / 5.0); + lights[OUT2_POS_LIGHT].value = fmaxf(0.0, out2 / 5.0); + lights[OUT2_NEG_LIGHT].value = fmaxf(0.0, -out2 / 5.0); } @@ -66,6 +73,6 @@ DualAtenuverterWidget::DualAtenuverterWidget() { addInput(createInput(Vec(7, 319), module, DualAtenuverter::IN2_INPUT)); addOutput(createOutput(Vec(43, 319), module, DualAtenuverter::OUT2_OUTPUT)); - addChild(createValueLight>(Vec(33, 143), &module->lights[0])); - addChild(createValueLight>(Vec(33, 311), &module->lights[1])); + addChild(createLight>(Vec(33, 143), module, DualAtenuverter::OUT1_POS_LIGHT)); + addChild(createLight>(Vec(33, 311), module, DualAtenuverter::OUT2_POS_LIGHT)); } diff --git a/src/Mixer.cpp b/src/Mixer.cpp index d6fe965..f7827f7 100644 --- a/src/Mixer.cpp +++ b/src/Mixer.cpp @@ -21,10 +21,13 @@ struct Mixer : Module { OUT2_OUTPUT, NUM_OUTPUTS }; + enum LightIds { + OUT_POS_LIGHT, + OUT_NEG_LIGHT, + NUM_LIGHTS + }; - float lights[1] = {}; - - Mixer() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {} + Mixer() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} void step() override; }; @@ -38,7 +41,8 @@ void Mixer::step() { float out = in1 + in2 + in3 + in4; outputs[OUT1_OUTPUT].value = out; outputs[OUT2_OUTPUT].value = -out; - lights[0] = out / 5.0; + lights[OUT_POS_LIGHT].value = fmaxf(0.0, out / 5.0); + lights[OUT_NEG_LIGHT].value = fmaxf(0.0, -out / 5.0); } @@ -71,5 +75,5 @@ MixerWidget::MixerWidget() { addOutput(createOutput(Vec(7, 324), module, Mixer::OUT1_OUTPUT)); addOutput(createOutput(Vec(43, 324), module, Mixer::OUT2_OUTPUT)); - addChild(createValueLight>(Vec(31, 309), &module->lights[0])); + addChild(createLight>(Vec(31, 309), module, Mixer::OUT_POS_LIGHT)); } diff --git a/src/Rampage.cpp b/src/Rampage.cpp index 18c77c5..109800b 100644 --- a/src/Rampage.cpp +++ b/src/Rampage.cpp @@ -46,6 +46,9 @@ struct Rampage : Module { COMPARATOR_OUTPUT, MIN_OUTPUT, MAX_OUTPUT, + NUM_OUTPUTS + }; + enum LightIds { COMPARATOR_LIGHT, MIN_LIGHT, MAX_LIGHT, @@ -55,7 +58,7 @@ struct Rampage : Module { RISING_B_LIGHT, FALLING_A_LIGHT, FALLING_B_LIGHT, - NUM_OUTPUTS + NUM_LIGHTS }; float out[2] = {}; @@ -63,7 +66,7 @@ struct Rampage : Module { SchmittTrigger trigger[2]; PulseGenerator endOfCyclePulse[2]; - Rampage() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) { + Rampage() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { for (int c = 0; c < 2; c++) { trigger[c].setThresholds(0.0, 4.0); } @@ -144,11 +147,11 @@ void Rampage::step() { outputs[RISING_A_OUTPUT + c].value = (rising ? 10.0 : 0.0); outputs[FALLING_A_OUTPUT + c].value = (falling ? 10.0 : 0.0); - outputs[RISING_A_LIGHT + c].value = (rising ? 1.0 : 0.0); - outputs[FALLING_A_LIGHT + c].value = (falling ? 1.0 : 0.0); + lights[RISING_A_LIGHT + c].value = (rising ? 1.0 : 0.0); + lights[FALLING_A_LIGHT + c].value = (falling ? 1.0 : 0.0); outputs[EOC_A_OUTPUT + c].value = (endOfCyclePulse[c].process(1.0 / engineGetSampleRate()) ? 10.0 : 0.0); outputs[OUT_A_OUTPUT + c].value = out[c]; - outputs[OUT_A_LIGHT + c].value = out[c] / 10.0; + lights[OUT_A_LIGHT + c].value = out[c] / 10.0; } // Logic @@ -163,9 +166,9 @@ void Rampage::step() { outputs[MIN_OUTPUT].value = fminf(a, b); outputs[MAX_OUTPUT].value = fmaxf(a, b); // Lights - outputs[COMPARATOR_LIGHT].value = outputs[COMPARATOR_OUTPUT].value / 10.0; - outputs[MIN_LIGHT].value = outputs[MIN_OUTPUT].value / 10.0; - outputs[MAX_LIGHT].value = outputs[MAX_OUTPUT].value / 10.0; + lights[COMPARATOR_LIGHT].value = outputs[COMPARATOR_OUTPUT].value / 10.0; + lights[MIN_LIGHT].value = outputs[MIN_OUTPUT].value / 10.0; + lights[MAX_LIGHT].value = outputs[MAX_OUTPUT].value / 10.0; } @@ -225,13 +228,13 @@ RampageWidget::RampageWidget() { addOutput(createOutput(Vec(89, 157), module, Rampage::MIN_OUTPUT)); addOutput(createOutput(Vec(155, 157), module, Rampage::MAX_OUTPUT)); - addChild(createValueLight>(Vec(131, 167), &module->outputs[Rampage::COMPARATOR_LIGHT].value)); - addChild(createValueLight>(Vec(122, 174), &module->outputs[Rampage::MIN_LIGHT].value)); - addChild(createValueLight>(Vec(140, 174), &module->outputs[Rampage::MAX_LIGHT].value)); - addChild(createValueLight>(Vec(125, 185), &module->outputs[Rampage::OUT_A_LIGHT].value)); - addChild(createValueLight>(Vec(137, 185), &module->outputs[Rampage::OUT_B_LIGHT].value)); - addChild(createValueLight>(Vec(17, 312), &module->outputs[Rampage::RISING_A_LIGHT].value)); - addChild(createValueLight>(Vec(77, 312), &module->outputs[Rampage::FALLING_A_LIGHT].value)); - addChild(createValueLight>(Vec(186, 312), &module->outputs[Rampage::RISING_B_LIGHT].value)); - addChild(createValueLight>(Vec(246, 312), &module->outputs[Rampage::FALLING_B_LIGHT].value)); + addChild(createLight>(Vec(131, 167), module, Rampage::COMPARATOR_LIGHT)); + addChild(createLight>(Vec(122, 174), module, Rampage::MIN_LIGHT)); + addChild(createLight>(Vec(140, 174), module, Rampage::MAX_LIGHT)); + addChild(createLight>(Vec(125, 185), module, Rampage::OUT_A_LIGHT)); + addChild(createLight>(Vec(137, 185), module, Rampage::OUT_B_LIGHT)); + addChild(createLight>(Vec(17, 312), module, Rampage::RISING_A_LIGHT)); + addChild(createLight>(Vec(77, 312), module, Rampage::FALLING_A_LIGHT)); + addChild(createLight>(Vec(186, 312), module, Rampage::RISING_B_LIGHT)); + addChild(createLight>(Vec(246, 312), module, Rampage::FALLING_B_LIGHT)); } diff --git a/src/SpringReverb.cpp b/src/SpringReverb.cpp index 5f330b2..85f3a88 100644 --- a/src/SpringReverb.cpp +++ b/src/SpringReverb.cpp @@ -158,6 +158,11 @@ struct SpringReverb : Module { WET_OUTPUT, NUM_OUTPUTS }; + enum LightIds { + PEAK_LIGHT, + VU1_LIGHT, + NUM_LIGHTS = VU1_LIGHT + 7 + }; RealTimeConvolver *convolver = NULL; SampleRateConverter<1> inputSrc; @@ -168,8 +173,6 @@ struct SpringReverb : Module { RCFilter dryFilter; PeakFilter vuFilter; PeakFilter lightFilter; - float vuLights[7] = {}; - float lights[1] = {}; SpringReverb(); ~SpringReverb(); @@ -177,7 +180,7 @@ struct SpringReverb : Module { }; -SpringReverb::SpringReverb() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) { +SpringReverb::SpringReverb() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { convolver = new RealTimeConvolver(BLOCKSIZE); convolver->setKernel(springReverbIR, springReverbIRLen); } @@ -253,9 +256,9 @@ void SpringReverb::step() { float vuValue = vuFilter.peak(); for (int i = 0; i < 7; i++) { float light = powf(1.413, i) * vuValue / 10.0 - 1.0; - vuLights[i] = clampf(light, 0.0, 1.0); + lights[VU1_LIGHT + i].value = clampf(light, 0.0, 1.0); } - lights[0] = lightFilter.peak(); + lights[PEAK_LIGHT].value = lightFilter.peak(); } @@ -292,13 +295,12 @@ SpringReverbWidget::SpringReverbWidget() { addInput(createInput(Vec(47, 324), module, SpringReverb::MIX_CV_INPUT)); addOutput(createOutput(Vec(88, 317), module, SpringReverb::WET_OUTPUT)); - addChild(createValueLight>(Vec(56, 114), &module->vuLights[0])); - addChild(createValueLight>(Vec(56, 127), &module->vuLights[1])); - addChild(createValueLight>(Vec(56, 139), &module->vuLights[2])); - addChild(createValueLight>(Vec(56, 151), &module->vuLights[3])); - addChild(createValueLight>(Vec(56, 164), &module->vuLights[4])); - addChild(createValueLight>(Vec(56, 176), &module->vuLights[5])); - addChild(createValueLight>(Vec(56, 189), &module->vuLights[6])); - - addChild(createValueLight>(Vec(56, 270), &module->lights[0])); + addChild(createLight>(Vec(56, 270), module, SpringReverb::PEAK_LIGHT)); + addChild(createLight>(Vec(56, 114), module, SpringReverb::VU1_LIGHT + 0)); + addChild(createLight>(Vec(56, 127), module, SpringReverb::VU1_LIGHT + 1)); + addChild(createLight>(Vec(56, 139), module, SpringReverb::VU1_LIGHT + 2)); + addChild(createLight>(Vec(56, 151), module, SpringReverb::VU1_LIGHT + 3)); + addChild(createLight>(Vec(56, 164), module, SpringReverb::VU1_LIGHT + 4)); + addChild(createLight>(Vec(56, 176), module, SpringReverb::VU1_LIGHT + 5)); + addChild(createLight>(Vec(56, 189), module, SpringReverb::VU1_LIGHT + 6)); }