@@ -62,7 +62,7 @@ struct ADSR : Module { | |||||
env = sustain; | env = sustain; | ||||
} | } | ||||
else { | else { | ||||
env += std::pow(base, 1 - decay) / maxTime * (sustain - env) * app()->engine->getSampleTime(); | |||||
env += std::pow(base, 1 - decay) / maxTime * (sustain - env) * APP->engine->getSampleTime(); | |||||
} | } | ||||
} | } | ||||
else { | else { | ||||
@@ -72,7 +72,7 @@ struct ADSR : Module { | |||||
env = 1.f; | env = 1.f; | ||||
} | } | ||||
else { | else { | ||||
env += std::pow(base, 1 - attack) / maxTime * (1.01f - env) * app()->engine->getSampleTime(); | |||||
env += std::pow(base, 1 - attack) / maxTime * (1.01f - env) * APP->engine->getSampleTime(); | |||||
} | } | ||||
if (env >= 1.f) { | if (env >= 1.f) { | ||||
env = 1.f; | env = 1.f; | ||||
@@ -86,7 +86,7 @@ struct ADSR : Module { | |||||
env = 0.f; | env = 0.f; | ||||
} | } | ||||
else { | else { | ||||
env += std::pow(base, 1 - release) / maxTime * (0.f - env) * app()->engine->getSampleTime(); | |||||
env += std::pow(base, 1 - release) / maxTime * (0.f - env) * APP->engine->getSampleTime(); | |||||
} | } | ||||
decaying = false; | decaying = false; | ||||
} | } | ||||
@@ -56,7 +56,7 @@ struct Delay : Module { | |||||
// Compute delay time in seconds | // Compute delay time in seconds | ||||
float delay = 1e-3 * std::pow(10.0f / 1e-3, clamp(params[TIME_PARAM].value + inputs[TIME_INPUT].value / 10.0f, 0.0f, 1.0f)); | float delay = 1e-3 * std::pow(10.0f / 1e-3, clamp(params[TIME_PARAM].value + inputs[TIME_INPUT].value / 10.0f, 0.0f, 1.0f)); | ||||
// Number of delay samples | // Number of delay samples | ||||
float index = delay * app()->engine->getSampleRate(); | |||||
float index = delay * APP->engine->getSampleRate(); | |||||
// Push dry sample into history buffer | // Push dry sample into history buffer | ||||
if (!historyBuffer.full()) { | if (!historyBuffer.full()) { | ||||
@@ -93,11 +93,11 @@ struct Delay : Module { | |||||
// TODO Make it sound better | // TODO Make it sound better | ||||
float color = clamp(params[COLOR_PARAM].value + inputs[COLOR_INPUT].value / 10.0f, 0.0f, 1.0f); | float color = clamp(params[COLOR_PARAM].value + inputs[COLOR_INPUT].value / 10.0f, 0.0f, 1.0f); | ||||
float lowpassFreq = 10000.0f * std::pow(10.0f, clamp(2.0f*color, 0.0f, 1.0f)); | float lowpassFreq = 10000.0f * std::pow(10.0f, clamp(2.0f*color, 0.0f, 1.0f)); | ||||
lowpassFilter.setCutoff(lowpassFreq / app()->engine->getSampleRate()); | |||||
lowpassFilter.setCutoff(lowpassFreq / APP->engine->getSampleRate()); | |||||
lowpassFilter.process(wet); | lowpassFilter.process(wet); | ||||
wet = lowpassFilter.lowpass(); | wet = lowpassFilter.lowpass(); | ||||
float highpassFreq = 10.0f * std::pow(100.0f, clamp(2.0f*color - 1.0f, 0.0f, 1.0f)); | float highpassFreq = 10.0f * std::pow(100.0f, clamp(2.0f*color - 1.0f, 0.0f, 1.0f)); | ||||
highpassFilter.setCutoff(highpassFreq / app()->engine->getSampleRate()); | |||||
highpassFilter.setCutoff(highpassFreq / APP->engine->getSampleRate()); | |||||
highpassFilter.process(wet); | highpassFilter.process(wet); | ||||
wet = highpassFilter.highpass(); | wet = highpassFilter.highpass(); | ||||
@@ -112,7 +112,7 @@ struct LFO : Module { | |||||
oscillator.setPulseWidth(params[PW_PARAM].value + params[PWM_PARAM].value * inputs[PW_INPUT].value / 10.f); | oscillator.setPulseWidth(params[PW_PARAM].value + params[PWM_PARAM].value * inputs[PW_INPUT].value / 10.f); | ||||
oscillator.offset = (params[OFFSET_PARAM].value > 0.f); | oscillator.offset = (params[OFFSET_PARAM].value > 0.f); | ||||
oscillator.invert = (params[INVERT_PARAM].value <= 0.f); | oscillator.invert = (params[INVERT_PARAM].value <= 0.f); | ||||
oscillator.step(app()->engine->getSampleTime()); | |||||
oscillator.step(APP->engine->getSampleTime()); | |||||
oscillator.setReset(inputs[RESET_INPUT].value); | oscillator.setReset(inputs[RESET_INPUT].value); | ||||
outputs[SIN_OUTPUT].value = 5.f * oscillator.sin(); | outputs[SIN_OUTPUT].value = 5.f * oscillator.sin(); | ||||
@@ -205,7 +205,7 @@ struct LFO2 : Module { | |||||
oscillator.setPitch(params[FREQ_PARAM].value + params[FM_PARAM].value * inputs[FM_INPUT].value); | oscillator.setPitch(params[FREQ_PARAM].value + params[FM_PARAM].value * inputs[FM_INPUT].value); | ||||
oscillator.offset = (params[OFFSET_PARAM].value > 0.f); | oscillator.offset = (params[OFFSET_PARAM].value > 0.f); | ||||
oscillator.invert = (params[INVERT_PARAM].value <= 0.f); | oscillator.invert = (params[INVERT_PARAM].value <= 0.f); | ||||
oscillator.step(app()->engine->getSampleTime()); | |||||
oscillator.step(APP->engine->getSampleTime()); | |||||
oscillator.setReset(inputs[RESET_INPUT].value); | oscillator.setReset(inputs[RESET_INPUT].value); | ||||
float wave = params[WAVE_PARAM].value + inputs[WAVE_INPUT].value; | float wave = params[WAVE_PARAM].value + inputs[WAVE_INPUT].value; | ||||
@@ -135,7 +135,7 @@ struct SEQ3 : Module { | |||||
else { | else { | ||||
// Internal clock | // Internal clock | ||||
float clockTime = std::pow(2.0f, params[CLOCK_PARAM].value + inputs[CLOCK_INPUT].value); | float clockTime = std::pow(2.0f, params[CLOCK_PARAM].value + inputs[CLOCK_INPUT].value); | ||||
phase += clockTime * app()->engine->getSampleTime(); | |||||
phase += clockTime * APP->engine->getSampleTime(); | |||||
if (phase >= 1.0f) { | if (phase >= 1.0f) { | ||||
setIndex(index + 1); | setIndex(index + 1); | ||||
} | } | ||||
@@ -73,7 +73,7 @@ struct Scope : Module { | |||||
// Compute time | // Compute time | ||||
float deltaTime = std::pow(2.0f, -params[TIME_PARAM].value); | float deltaTime = std::pow(2.0f, -params[TIME_PARAM].value); | ||||
int frameCount = (int) std::ceil(deltaTime * app()->engine->getSampleRate()); | |||||
int frameCount = (int) std::ceil(deltaTime * APP->engine->getSampleRate()); | |||||
// Add frame to buffer | // Add frame to buffer | ||||
if (bufferIndex < BUFFER_SIZE) { | if (bufferIndex < BUFFER_SIZE) { | ||||
@@ -105,12 +105,12 @@ struct Scope : Module { | |||||
// Reset if triggered | // Reset if triggered | ||||
float holdTime = 0.1f; | float holdTime = 0.1f; | ||||
if (resetTrigger.process(rescale(gate, params[TRIG_PARAM].value - 0.1f, params[TRIG_PARAM].value, 0.f, 1.f)) || (frameIndex >= app()->engine->getSampleRate() * holdTime)) { | |||||
if (resetTrigger.process(rescale(gate, params[TRIG_PARAM].value - 0.1f, params[TRIG_PARAM].value, 0.f, 1.f)) || (frameIndex >= APP->engine->getSampleRate() * holdTime)) { | |||||
bufferIndex = 0; frameIndex = 0; return; | bufferIndex = 0; frameIndex = 0; return; | ||||
} | } | ||||
// Reset if we've waited too long | // Reset if we've waited too long | ||||
if (frameIndex >= app()->engine->getSampleRate() * holdTime) { | |||||
if (frameIndex >= APP->engine->getSampleRate() * holdTime) { | |||||
bufferIndex = 0; frameIndex = 0; return; | bufferIndex = 0; frameIndex = 0; return; | ||||
} | } | ||||
} | } | ||||
@@ -122,7 +122,7 @@ struct VCF : Module { | |||||
/* | /* | ||||
// Process sample | // Process sample | ||||
float dt = app()->engine->getSampleTime() / UPSAMPLE; | |||||
float dt = APP->engine->getSampleTime() / UPSAMPLE; | |||||
float inputBuf[UPSAMPLE]; | float inputBuf[UPSAMPLE]; | ||||
float lowpassBuf[UPSAMPLE]; | float lowpassBuf[UPSAMPLE]; | ||||
float highpassBuf[UPSAMPLE]; | float highpassBuf[UPSAMPLE]; | ||||
@@ -142,7 +142,7 @@ struct VCF : Module { | |||||
outputs[HPF_OUTPUT].value = 5.f * highpassDecimator.process(highpassBuf); | outputs[HPF_OUTPUT].value = 5.f * highpassDecimator.process(highpassBuf); | ||||
} | } | ||||
*/ | */ | ||||
filter.process(input, app()->engine->getSampleTime()); | |||||
filter.process(input, APP->engine->getSampleTime()); | |||||
outputs[LPF_OUTPUT].value = 5.f * filter.lowpass; | outputs[LPF_OUTPUT].value = 5.f * filter.lowpass; | ||||
outputs[HPF_OUTPUT].value = 5.f * filter.highpass; | outputs[HPF_OUTPUT].value = 5.f * filter.highpass; | ||||
} | } | ||||
@@ -58,7 +58,7 @@ struct VoltageControlledOscillator { | |||||
// Adjust pitch slew | // Adjust pitch slew | ||||
if (++pitchSlewIndex > 32) { | if (++pitchSlewIndex > 32) { | ||||
const float pitchSlewTau = 100.f; // Time constant for leaky integrator in seconds | const float pitchSlewTau = 100.f; // Time constant for leaky integrator in seconds | ||||
pitchSlew += (random::normal() - pitchSlew / pitchSlewTau) * app()->engine->getSampleTime(); | |||||
pitchSlew += (random::normal() - pitchSlew / pitchSlewTau) * APP->engine->getSampleTime(); | |||||
pitchSlewIndex = 0; | pitchSlewIndex = 0; | ||||
} | } | ||||
} | } | ||||
@@ -217,7 +217,7 @@ struct VCO : Module { | |||||
oscillator.setPulseWidth(params[PW_PARAM].value + params[PWM_PARAM].value * inputs[PW_INPUT].value / 10.f); | oscillator.setPulseWidth(params[PW_PARAM].value + params[PWM_PARAM].value * inputs[PW_INPUT].value / 10.f); | ||||
oscillator.syncEnabled = inputs[SYNC_INPUT].active; | oscillator.syncEnabled = inputs[SYNC_INPUT].active; | ||||
oscillator.process(app()->engine->getSampleTime(), inputs[SYNC_INPUT].value); | |||||
oscillator.process(APP->engine->getSampleTime(), inputs[SYNC_INPUT].value); | |||||
// Set output | // Set output | ||||
if (outputs[SIN_OUTPUT].active) | if (outputs[SIN_OUTPUT].active) | ||||
@@ -316,7 +316,7 @@ struct VCO2 : Module { | |||||
oscillator.setPitch(0.f, pitchCv); | oscillator.setPitch(0.f, pitchCv); | ||||
oscillator.syncEnabled = inputs[SYNC_INPUT].active; | oscillator.syncEnabled = inputs[SYNC_INPUT].active; | ||||
oscillator.process(app()->engine->getSampleTime(), inputs[SYNC_INPUT].value); | |||||
oscillator.process(APP->engine->getSampleTime(), inputs[SYNC_INPUT].value); | |||||
// Set output | // Set output | ||||
float wave = clamp(params[WAVE_PARAM].value + inputs[WAVE_INPUT].value, 0.f, 3.f); | float wave = clamp(params[WAVE_PARAM].value + inputs[WAVE_INPUT].value, 0.f, 3.f); | ||||