|
@@ -102,6 +102,10 @@ struct Peaks : Module { |
|
|
|
|
|
|
|
|
dsp::SchmittTrigger switches_[2]; |
|
|
dsp::SchmittTrigger switches_[2]; |
|
|
|
|
|
|
|
|
|
|
|
// update descriptions/knobs every 16 samples |
|
|
|
|
|
static const int cvUpdateFrequency = 16; |
|
|
|
|
|
dsp::ClockDivider cvDivider; |
|
|
|
|
|
|
|
|
peaks::GateFlags gate_flags[2] = {0, 0}; |
|
|
peaks::GateFlags gate_flags[2] = {0, 0}; |
|
|
|
|
|
|
|
|
dsp::SampleRateConverter<2> outputSrc; |
|
|
dsp::SampleRateConverter<2> outputSrc; |
|
@@ -201,6 +205,9 @@ struct Peaks : Module { |
|
|
configButton(TRIG_1_PARAM, "Trigger 1"); |
|
|
configButton(TRIG_1_PARAM, "Trigger 1"); |
|
|
configButton(TRIG_2_PARAM, "Trigger 2"); |
|
|
configButton(TRIG_2_PARAM, "Trigger 2"); |
|
|
|
|
|
|
|
|
|
|
|
getParamQuantity(BUTTON_1_PARAM)->description = "Long press to enter/leave Expert Mode"; |
|
|
|
|
|
getParamQuantity(BUTTON_2_PARAM)->description = "Long press to enable/disable Easter Egg Modes"; |
|
|
|
|
|
|
|
|
settings_.edit_mode = EDIT_MODE_TWIN; |
|
|
settings_.edit_mode = EDIT_MODE_TWIN; |
|
|
settings_.function[0] = FUNCTION_ENVELOPE; |
|
|
settings_.function[0] = FUNCTION_ENVELOPE; |
|
|
settings_.function[1] = FUNCTION_ENVELOPE; |
|
|
settings_.function[1] = FUNCTION_ENVELOPE; |
|
@@ -211,6 +218,8 @@ struct Peaks : Module { |
|
|
memset(&processors[1], 0, sizeof(processors[1])); |
|
|
memset(&processors[1], 0, sizeof(processors[1])); |
|
|
processors[0].Init(0); |
|
|
processors[0].Init(0); |
|
|
processors[1].Init(1); |
|
|
processors[1].Init(1); |
|
|
|
|
|
|
|
|
|
|
|
cvDivider.setDivision(cvUpdateFrequency); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void onReset() override { |
|
|
void onReset() override { |
|
@@ -458,9 +467,12 @@ struct Peaks : Module { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void process(const ProcessArgs& args) override { |
|
|
void process(const ProcessArgs& args) override { |
|
|
poll(); |
|
|
|
|
|
pollPots(); |
|
|
|
|
|
updateKnobDescriptions(); |
|
|
|
|
|
|
|
|
// only update knobs / lights every 16 samples |
|
|
|
|
|
if (cvDivider.process()) { |
|
|
|
|
|
poll(); |
|
|
|
|
|
pollPots(); |
|
|
|
|
|
updateKnobDescriptions(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// Initialize "secret" number station mode. |
|
|
// Initialize "secret" number station mode. |
|
|
if (initNumberStation) { |
|
|
if (initNumberStation) { |
|
@@ -778,26 +790,30 @@ void Peaks::saveState() { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void Peaks::refreshLeds() { |
|
|
void Peaks::refreshLeds() { |
|
|
|
|
|
|
|
|
|
|
|
// refreshLeds() is only updated every N samples, so make sure setBrightnessSmooth methods account for this |
|
|
|
|
|
const float sampleTime = APP->engine->getSampleTime() * cvUpdateFrequency; |
|
|
|
|
|
|
|
|
uint8_t flash = (getSystemTimeMs() >> 7) & 7; |
|
|
uint8_t flash = (getSystemTimeMs() >> 7) & 7; |
|
|
switch (edit_mode_) { |
|
|
switch (edit_mode_) { |
|
|
case EDIT_MODE_FIRST: |
|
|
case EDIT_MODE_FIRST: |
|
|
lights[TWIN_MODE_LIGHT].value = (flash == 1) ? 1.0f : 0.0f; |
|
|
|
|
|
|
|
|
lights[TWIN_MODE_LIGHT].setBrightnessSmooth((flash == 1) ? 1.0f : 0.0f, sampleTime); |
|
|
break; |
|
|
break; |
|
|
case EDIT_MODE_SECOND: |
|
|
case EDIT_MODE_SECOND: |
|
|
lights[TWIN_MODE_LIGHT].value = (flash == 1 || flash == 3) ? 1.0f : 0.0f; |
|
|
|
|
|
|
|
|
lights[TWIN_MODE_LIGHT].setBrightnessSmooth((flash == 1 || flash == 3) ? 1.0f : 0.0f, sampleTime); |
|
|
break; |
|
|
break; |
|
|
default: |
|
|
default: |
|
|
lights[TWIN_MODE_LIGHT].value = (edit_mode_ & 1) ? 1.0f : 0.0f; |
|
|
|
|
|
|
|
|
lights[TWIN_MODE_LIGHT].setBrightnessSmooth((edit_mode_ & 1) ? 1.0f : 0.0f, sampleTime); |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
if ((getSystemTimeMs() & 256) && function() >= FUNCTION_FIRST_ALTERNATE_FUNCTION) { |
|
|
if ((getSystemTimeMs() & 256) && function() >= FUNCTION_FIRST_ALTERNATE_FUNCTION) { |
|
|
for (size_t i = 0; i < 4; ++i) { |
|
|
for (size_t i = 0; i < 4; ++i) { |
|
|
lights[FUNC_1_LIGHT + i].value = 0.0f; |
|
|
|
|
|
|
|
|
lights[FUNC_1_LIGHT + i].setBrightnessSmooth(0.0f, sampleTime); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
else { |
|
|
else { |
|
|
for (size_t i = 0; i < 4; ++i) { |
|
|
for (size_t i = 0; i < 4; ++i) { |
|
|
lights[FUNC_1_LIGHT + i].value = ((function() & 3) == i) ? 1.0f : 0.0f; |
|
|
|
|
|
|
|
|
lights[FUNC_1_LIGHT + i].setBrightnessSmooth(((function() & 3) == i) ? 1.0f : 0.0f, sampleTime); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|