From afa83c92b0da50d2ca3c6f8cfc98a3f4786843dd Mon Sep 17 00:00:00 2001 From: Andrew Belt Date: Mon, 8 Nov 2021 16:07:42 -0500 Subject: [PATCH] Add "clock passthrough" mode to SEQ3. --- src/SEQ3.cpp | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/SEQ3.cpp b/src/SEQ3.cpp index 7be5e93..2102d15 100644 --- a/src/SEQ3.cpp +++ b/src/SEQ3.cpp @@ -44,6 +44,7 @@ struct SEQ3 : Module { }; bool running = true; + bool clockPassthrough = false; dsp::BooleanTrigger runButtonTrigger; dsp::BooleanTrigger resetButtonTrigger; @@ -107,6 +108,7 @@ struct SEQ3 : Module { } void onReset() override { + clockPassthrough = false; for (int i = 0; i < 8; i++) { gates[i] = true; } @@ -164,6 +166,7 @@ struct SEQ3 : Module { // Clock bool clock = false; + bool clockGate = false; if (running) { if (inputs[CLOCK_INPUT].isConnected()) { // External clock @@ -171,6 +174,7 @@ struct SEQ3 : Module { if (clockTrigger.process(inputs[CLOCK_INPUT].getVoltage(), 0.1f, 2.f) && !resetGate) { clock = true; } + clockGate = clockTrigger.isHigh(); } else { // Internal clock @@ -181,6 +185,7 @@ struct SEQ3 : Module { clock = true; } phase -= std::trunc(phase); + clockGate = (phase < 0.5f); } } @@ -195,7 +200,9 @@ struct SEQ3 : Module { if (index >= numSteps) index = 0; } - bool clockGate = clockPulse.process(args.sampleTime); + // Unless we're passing the clock gate, generate a pulse + if (!clockPassthrough) + clockGate = clockPulse.process(args.sampleTime); // Gate buttons for (int i = 0; i < 8; i++) { @@ -240,6 +247,9 @@ struct SEQ3 : Module { } json_object_set_new(rootJ, "gates", gatesJ); + // clockPassthrough + json_object_set_new(rootJ, "clockPassthrough", json_boolean(clockPassthrough)); + return rootJ; } @@ -258,6 +268,13 @@ struct SEQ3 : Module { gates[i] = !!json_integer_value(gateJ); } } + + // clockPassthrough + json_t* clockPassthroughJ = json_object_get(rootJ, "clockPassthrough"); + if (clockPassthroughJ) + clockPassthrough = json_is_true(clockPassthroughJ); + else + clockPassthrough = true; } }; @@ -357,6 +374,10 @@ struct SEQ3Widget : ModuleWidget { menu->addChild(new MenuSeparator); + menu->addChild(createBoolPtrMenuItem("Clock passthrough", "", &module->clockPassthrough)); + + menu->addChild(new MenuSeparator); + menu->addChild(createMenuItem("Rotate left", "", [=]() {module->rotateStates(-1);} ));