@@ -106,13 +106,13 @@ struct LFO : Module { | |||
LFO() { | |||
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
configParam(OFFSET_PARAM, 0.f, 1.f, 1.f); | |||
configParam(INVERT_PARAM, 0.f, 1.f, 1.f); | |||
configParam(FREQ_PARAM, -8.f, 10.f, 1.f); | |||
configParam(FM1_PARAM, 0.f, 1.f, 0.f); | |||
configParam(PW_PARAM, 0.f, 1.f, 0.5f); | |||
configParam(FM2_PARAM, 0.f, 1.f, 0.f); | |||
configParam(PWM_PARAM, 0.f, 1.f, 0.f); | |||
configParam(OFFSET_PARAM, 0.f, 1.f, 1.f, "Offset"); | |||
configParam(INVERT_PARAM, 0.f, 1.f, 1.f, "Invert"); | |||
configParam(FREQ_PARAM, -8.f, 10.f, 1.f, "Frequency", " Hz", 2, 1); | |||
configParam(FM1_PARAM, 0.f, 1.f, 0.f, "Frequency modulation 1", "%", 0.f, 100.f); | |||
configParam(PW_PARAM, 0.f, 1.f, 0.5f, "Pulse width", "%", 0.f, 100.f); | |||
configParam(FM2_PARAM, 0.f, 1.f, 0.f, "Frequency modulation 2", "%", 0.f, 100.f); | |||
configParam(PWM_PARAM, 0.f, 1.f, 0.f, "Pulse width modulation", "%", 0.f, 100.f); | |||
lightDivider.setDivision(16); | |||
} | |||
@@ -259,11 +259,11 @@ struct LFO2 : Module { | |||
LFO2() { | |||
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
configParam(OFFSET_PARAM, 0.f, 1.f, 1.f); | |||
configParam(INVERT_PARAM, 0.f, 1.f, 1.f); | |||
configParam(FREQ_PARAM, -8.f, 10.f, 1.f); | |||
configParam(WAVE_PARAM, 0.f, 3.f, 1.5f); | |||
configParam(FM_PARAM, 0.f, 1.f, 0.5f); | |||
configParam(OFFSET_PARAM, 0.f, 1.f, 1.f, "Offset"); | |||
configParam(INVERT_PARAM, 0.f, 1.f, 1.f, "Invert"); | |||
configParam(FREQ_PARAM, -8.f, 10.f, 1.f, "Frequency", " Hz", 2, 1); | |||
configParam(WAVE_PARAM, 0.f, 3.f, 1.5f, "Wave"); | |||
configParam(FM_PARAM, 0.f, 1.f, 0.5f, "Frequency modulation", "%", 0.f, 100.f); | |||
lightDivider.setDivision(16); | |||
} | |||
@@ -49,13 +49,14 @@ struct Scope : Module { | |||
Scope() { | |||
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
configParam(X_SCALE_PARAM, -2.f, 8.f, 0.f); | |||
configParam(X_POS_PARAM, -10.f, 10.f, 0.f); | |||
configParam(Y_SCALE_PARAM, -2.f, 8.f, 0.f); | |||
configParam(Y_POS_PARAM, -10.f, 10.f, 0.f); | |||
configParam(TIME_PARAM, 6.f, 16.f, 14.f); | |||
configParam(X_SCALE_PARAM, -2.f, 8.f, 0.f, "X scale", " V/div", 1/2.f, 5); | |||
configParam(X_POS_PARAM, -10.f, 10.f, 0.f, "X position", " V"); | |||
configParam(Y_SCALE_PARAM, -2.f, 8.f, 0.f, "Y scale", " V/div", 1/2.f, 5); | |||
configParam(Y_POS_PARAM, -10.f, 10.f, 0.f, "Y position", " V"); | |||
const float timeBase = (float) BUFFER_SIZE / 6; | |||
configParam(TIME_PARAM, 6.f, 16.f, 14.f, "Time", " ms/div", 1/2.f, 1000 * timeBase); | |||
configParam(LISSAJOUS_PARAM, 0.f, 1.f, 0.f); | |||
configParam(TRIG_PARAM, -10.f, 10.f, 0.f); | |||
configParam(TRIG_PARAM, -10.f, 10.f, 0.f, "Trigger position", " V"); | |||
configParam(EXTERNAL_PARAM, 0.f, 1.f, 0.f); | |||
} | |||
@@ -32,7 +32,7 @@ struct LadderFilter { | |||
} | |||
void setCutoff(T cutoff) { | |||
omega0 = 2*M_PI * cutoff; | |||
omega0 = 2 * T(M_PI) * cutoff; | |||
} | |||
void process(T input, T dt) { | |||
@@ -93,11 +93,12 @@ struct VCF : Module { | |||
VCF() { | |||
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS); | |||
configParam(FREQ_PARAM, 0.f, 1.f, 0.5f, "Frequency"); | |||
// Multiply and offset for backward patch compatibility | |||
configParam(FREQ_PARAM, 0.f, 1.f, 0.5f, "Frequency", " Hz", std::pow(2, 10.f), dsp::FREQ_C4 / std::pow(2, 5.f)); | |||
configParam(FINE_PARAM, 0.f, 1.f, 0.5f, "Fine frequency"); | |||
configParam(RES_PARAM, 0.f, 1.f, 0.f, "Resonance"); | |||
configParam(FREQ_CV_PARAM, -1.f, 1.f, 0.f, "Frequency modulation"); | |||
configParam(DRIVE_PARAM, 0.f, 1.f, 0.f, "Drive"); | |||
configParam(RES_PARAM, 0.f, 1.f, 0.f, "Resonance", "%", 0.f, 100.f); | |||
configParam(FREQ_CV_PARAM, -1.f, 1.f, 0.f, "Frequency modulation", "%", 0.f, 100.f); | |||
configParam(DRIVE_PARAM, 0.f, 1.f, 0.f, "Drive", "", 0, 11); | |||
} | |||
void onReset() override { | |||
@@ -127,11 +128,7 @@ struct VCF : Module { | |||
float_4 input = float_4::load(inputs[IN_INPUT].getVoltages(c)) / 5.f; | |||
// Drive gain | |||
float_4 drive = driveParam; | |||
if (inputs[DRIVE_INPUT].isPolyphonic()) | |||
drive += float_4::load(inputs[DRIVE_INPUT].getVoltages(c)) / 10.f; | |||
else | |||
drive += inputs[DRIVE_INPUT].getVoltage() / 10.f; | |||
float_4 drive = driveParam + inputs[DRIVE_INPUT].getPolyVoltageSimd<float_4>(c) / 10.f; | |||
drive = clamp(drive, 0.f, 1.f); | |||
float_4 gain = simd::pow(1.f + drive, 5); | |||
input *= gain; | |||
@@ -140,22 +137,12 @@ struct VCF : Module { | |||
input += 1e-6f * (2.f * random::uniform() - 1.f); | |||
// Set resonance | |||
float_4 resonance = resParam; | |||
if (inputs[RES_INPUT].isPolyphonic()) | |||
resonance += float_4::load(inputs[RES_INPUT].getVoltages(c)) / 10.f; | |||
else | |||
resonance += inputs[RES_INPUT].getVoltage() / 10.f; | |||
float_4 resonance = resParam + inputs[RES_INPUT].getPolyVoltageSimd<float_4>(c) / 10.f; | |||
resonance = clamp(resonance, 0.f, 1.f); | |||
filter->resonance = simd::pow(resonance, 2) * 10.f; | |||
// Get pitch | |||
float_4 pitch = 0.f; | |||
if (inputs[FREQ_INPUT].isPolyphonic()) | |||
pitch += float_4::load(inputs[FREQ_INPUT].getVoltages(c)) * freqCvParam; | |||
else | |||
pitch += inputs[FREQ_INPUT].getVoltage() * freqCvParam; | |||
pitch += freqParam; | |||
pitch += fineParam; | |||
float_4 pitch = freqParam + fineParam + inputs[FREQ_INPUT].getPolyVoltageSimd<float_4>(c) * freqCvParam; | |||
// Set cutoff | |||
float_4 cutoff = dsp::FREQ_C4 * simd::pow(2.f, pitch); | |||
cutoff = clamp(cutoff, 1.f, 8000.f); | |||
@@ -199,7 +199,7 @@ struct VCO : Module { | |||
configParam(SYNC_PARAM, 0.f, 1.f, 1.f, "Hard sync"); | |||
configParam(FREQ_PARAM, -54.f, 54.f, 0.f, "Frequency", " Hz", dsp::FREQ_SEMITONE, dsp::FREQ_C4); | |||
configParam(FINE_PARAM, -1.f, 1.f, 0.f, "Fine frequency"); | |||
configParam(FM_PARAM, 0.f, 1.f, 0.f, "Frequency modulation"); | |||
configParam(FM_PARAM, 0.f, 1.f, 0.f, "Frequency modulation", "%", 0.f, 100.f); | |||
configParam(PW_PARAM, 0.f, 1.f, 0.5f, "Pulse width", "%", 0.f, 100.f); | |||
configParam(PWM_PARAM, 0.f, 1.f, 0.f, "Pulse width modulation", "%", 0.f, 100.f); | |||
} | |||
@@ -305,7 +305,7 @@ struct VCO2 : Module { | |||
configParam(SYNC_PARAM, 0.f, 1.f, 1.f, "Hard sync"); | |||
configParam(FREQ_PARAM, -54.f, 54.f, 0.f, "Frequency", " Hz", dsp::FREQ_SEMITONE, dsp::FREQ_C4); | |||
configParam(WAVE_PARAM, 0.f, 3.f, 1.5f, "Wave"); | |||
configParam(FM_PARAM, 0.f, 1.f, 0.f, "Frequency modulation"); | |||
configParam(FM_PARAM, 0.f, 1.f, 0.f, "Frequency modulation", "%", 0.f, 100.f); | |||
} | |||
void process(const ProcessArgs &args) override { | |||