|
|
@@ -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);} |
|
|
|
)); |
|
|
|