@@ -35,9 +35,7 @@ struct ADSR : Module { | |||||
float env = 0.0f; | float env = 0.0f; | ||||
SchmittTrigger trigger; | SchmittTrigger trigger; | ||||
ADSR() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { | |||||
trigger.setThresholds(0.0f, 1.0f); | |||||
} | |||||
ADSR() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} | |||||
void step() override; | void step() override; | ||||
}; | }; | ||||
@@ -9,9 +9,8 @@ struct LowFrequencyOscillator { | |||||
bool offset = false; | bool offset = false; | ||||
bool invert = false; | bool invert = false; | ||||
SchmittTrigger resetTrigger; | SchmittTrigger resetTrigger; | ||||
LowFrequencyOscillator() { | |||||
resetTrigger.setThresholds(0.0f, 0.01f); | |||||
} | |||||
LowFrequencyOscillator() {} | |||||
void setPitch(float pitch) { | void setPitch(float pitch) { | ||||
pitch = fminf(pitch, 8.0f); | pitch = fminf(pitch, 8.0f); | ||||
freq = powf(2.0f, pitch); | freq = powf(2.0f, pitch); | ||||
@@ -21,7 +20,7 @@ struct LowFrequencyOscillator { | |||||
pw = clamp(pw_, pwMin, 1.0f - pwMin); | pw = clamp(pw_, pwMin, 1.0f - pwMin); | ||||
} | } | ||||
void setReset(float reset) { | void setReset(float reset) { | ||||
if (resetTrigger.process(reset)) { | |||||
if (resetTrigger.process(reset / 0.01f)) { | |||||
phase = 0.0f; | phase = 0.0f; | ||||
} | } | ||||
} | } | ||||
@@ -116,12 +116,11 @@ void Scope::step() { | |||||
frameIndex++; | frameIndex++; | ||||
// Must go below 0.1fV to trigger | // Must go below 0.1fV to trigger | ||||
resetTrigger.setThresholds(params[TRIG_PARAM].value - 0.1f, params[TRIG_PARAM].value); | |||||
float gate = external ? inputs[TRIG_INPUT].value : inputs[X_INPUT].value; | float gate = external ? inputs[TRIG_INPUT].value : inputs[X_INPUT].value; | ||||
// Reset if triggered | // Reset if triggered | ||||
float holdTime = 0.1f; | float holdTime = 0.1f; | ||||
if (resetTrigger.process(gate) || (frameIndex >= engineGetSampleRate() * holdTime)) { | |||||
if (resetTrigger.process(rescale(gate, params[TRIG_PARAM].value - 0.1f, params[TRIG_PARAM].value, 0.f, 1.f)) || (frameIndex >= engineGetSampleRate() * holdTime)) { | |||||
bufferIndex = 0; frameIndex = 0; return; | bufferIndex = 0; frameIndex = 0; return; | ||||
} | } | ||||
@@ -30,8 +30,6 @@ struct SequentialSwitch : Module { | |||||
SlewLimiter channelFilter[4]; | SlewLimiter channelFilter[4]; | ||||
SequentialSwitch() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { | SequentialSwitch() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { | ||||
clockTrigger.setThresholds(0.0f, 2.0f); | |||||
resetTrigger.setThresholds(0.0f, 2.0f); | |||||
for (int i = 0; i < 4; i++) { | for (int i = 0; i < 4; i++) { | ||||
channelFilter[i].rise = 0.01f; | channelFilter[i].rise = 0.01f; | ||||
channelFilter[i].fall = 0.01f; | channelFilter[i].fall = 0.01f; | ||||
@@ -40,10 +38,10 @@ struct SequentialSwitch : Module { | |||||
void step() override { | void step() override { | ||||
// Determine current channel | // Determine current channel | ||||
if (clockTrigger.process(inputs[CLOCK_INPUT].value)) { | |||||
if (clockTrigger.process(inputs[CLOCK_INPUT].value / 2.f)) { | |||||
channel++; | channel++; | ||||
} | } | ||||
if (resetTrigger.process(inputs[RESET_INPUT].value)) { | |||||
if (resetTrigger.process(inputs[RESET_INPUT].value / 2.f)) { | |||||
channel = 0; | channel = 0; | ||||
} | } | ||||
int channels = 4 - (int) params[CHANNELS_PARAM].value; | int channels = 4 - (int) params[CHANNELS_PARAM].value; | ||||