Browse Source

Update light setting calls, only update knobs every 16 samples

pull/120/head
hemmer 3 years ago
parent
commit
47519859b1
1 changed files with 24 additions and 8 deletions
  1. +24
    -8
      src/Peaks.cpp

+ 24
- 8
src/Peaks.cpp View File

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




Loading…
Cancel
Save