diff --git a/src/Gates.cpp b/src/Gates.cpp index 935e147..b31495d 100644 --- a/src/Gates.cpp +++ b/src/Gates.cpp @@ -74,10 +74,9 @@ struct Gates : Module { bool anyEnd = false; // Reset + bool resetButton = false; if (resetParamTrigger.process(params[RESET_PARAM].getValue() > 0.f)) { - for (int c = 0; c < 16; c++) { - flop[c] = false; - } + resetButton = true; } // Process channels @@ -104,18 +103,24 @@ struct Gates : Module { } // Reset + bool reset = resetButton; if (resetTrigger[c].process(inputs[RESET_INPUT].getVoltage(c), 0.1f, 2.f)) { + reset = true; + } + if (reset) { flop[c] = false; } // Gate float gatePitch = params[LENGTH_PARAM].getValue() + inputs[LENGTH_INPUT].getPolyVoltage(c); float gateLength = dsp::approxExp2_taylor5(gatePitch + 30.f) / 1073741824; - if (std::isfinite(gateTime[c]) && gateTime[c] >= gateLength) { - gateTime[c] = INFINITY; - eogPulse[c].trigger(1e-3f); + if (std::isfinite(gateTime[c])) { + gateTime[c] += args.sampleTime; + if (reset || gateTime[c] >= gateLength) { + gateTime[c] = INFINITY; + eogPulse[c].trigger(1e-3f); + } } - gateTime[c] += args.sampleTime; // Outputs bool rise = risePulse[c].process(args.sampleTime);