Browse Source

Add "clock passthrough" mode to SEQ3.

tags/v2.0.1
Andrew Belt 3 years ago
parent
commit
afa83c92b0
1 changed files with 22 additions and 1 deletions
  1. +22
    -1
      src/SEQ3.cpp

+ 22
- 1
src/SEQ3.cpp View File

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


Loading…
Cancel
Save