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