Browse Source

Update to Rack v1 API.

tags/v1.1.0
Andrew Belt 6 years ago
parent
commit
a73a0083af
7 changed files with 46 additions and 46 deletions
  1. +5
    -5
      src/ABC.cpp
  2. +5
    -5
      src/DualAtenuverter.cpp
  3. +4
    -4
      src/EvenVCO.cpp
  4. +9
    -9
      src/Mixer.cpp
  5. +11
    -11
      src/Rampage.cpp
  6. +5
    -5
      src/SlewLimiter.cpp
  7. +7
    -7
      src/SpringReverb.cpp

+ 5
- 5
src/ABC.cpp View File

@@ -46,7 +46,7 @@ struct ABC : Module {
params[C2_LEVEL_PARAM].config(-1.0, 1.0, 0.0, "C2 Level");
}

void step() override {
void process(const ProcessArgs &args) override {
float a1 = inputs[A1_INPUT].value;
float b1 = inputs[B1_INPUT].getNormalVoltage(5.f) * 2.f*dsp::exponentialBipolar(80.f, params[B1_LEVEL_PARAM].value);
float c1 = inputs[C1_INPUT].getNormalVoltage(10.f) * dsp::exponentialBipolar(80.f, params[C1_LEVEL_PARAM].value);
@@ -69,10 +69,10 @@ struct ABC : Module {
}

// Lights
lights[OUT1_POS_LIGHT].setBrightnessSmooth(std::max(0.f, out1 / 5.f));
lights[OUT1_NEG_LIGHT].setBrightnessSmooth(std::max(0.f, -out1 / 5.f));
lights[OUT2_POS_LIGHT].setBrightnessSmooth(std::max(0.f, out2 / 5.f));
lights[OUT2_NEG_LIGHT].setBrightnessSmooth(std::max(0.f, -out2 / 5.f));
lights[OUT1_POS_LIGHT].setSmoothBrightness(out1 / 5.f, args.sampleTime);
lights[OUT1_NEG_LIGHT].setSmoothBrightness(-out1 / 5.f, args.sampleTime);
lights[OUT2_POS_LIGHT].setSmoothBrightness(out2 / 5.f, args.sampleTime);
lights[OUT2_NEG_LIGHT].setSmoothBrightness(-out2 / 5.f, args.sampleTime);
}
};



+ 5
- 5
src/DualAtenuverter.cpp View File

@@ -35,7 +35,7 @@ struct DualAtenuverter : Module {
params[OFFSET2_PARAM].config(-10.0, 10.0, 0.0, "Ch 2 offset", " V");
}

void step() override {
void process(const ProcessArgs &args) override {
float out1 = inputs[IN1_INPUT].value * params[ATEN1_PARAM].value + params[OFFSET1_PARAM].value;
float out2 = inputs[IN2_INPUT].value * params[ATEN2_PARAM].value + params[OFFSET2_PARAM].value;
out1 = clamp(out1, -10.f, 10.f);
@@ -43,10 +43,10 @@ struct DualAtenuverter : Module {

outputs[OUT1_OUTPUT].value = out1;
outputs[OUT2_OUTPUT].value = out2;
lights[OUT1_POS_LIGHT].setBrightnessSmooth(std::max(0.f, out1 / 5.f));
lights[OUT1_NEG_LIGHT].setBrightnessSmooth(std::max(0.f, -out1 / 5.f));
lights[OUT2_POS_LIGHT].setBrightnessSmooth(std::max(0.f, out2 / 5.f));
lights[OUT2_NEG_LIGHT].setBrightnessSmooth(std::max(0.f, -out2 / 5.f));
lights[OUT1_POS_LIGHT].setSmoothBrightness(out1 / 5.f, args.sampleTime);
lights[OUT1_NEG_LIGHT].setSmoothBrightness(-out1 / 5.f, args.sampleTime);
lights[OUT2_POS_LIGHT].setSmoothBrightness(out2 / 5.f, args.sampleTime);
lights[OUT2_NEG_LIGHT].setSmoothBrightness(-out2 / 5.f, args.sampleTime);
}
};



+ 4
- 4
src/EvenVCO.cpp View File

@@ -49,7 +49,7 @@ struct EvenVCO : Module {
params[PWM_PARAM].config(-1.0, 1.0, 0.0, "Pulse width");
}

void step() override {
void process(const ProcessArgs &args) override {
// Compute frequency, pitch is 1V/oct
float pitch = 1.f + std::round(params[OCTAVE_PARAM].value) + params[TUNE_PARAM].value / 12.f;
pitch += inputs[PITCH1_INPUT].value + inputs[PITCH2_INPUT].value;
@@ -63,7 +63,7 @@ struct EvenVCO : Module {
pw = rescale(clamp(pw, -1.f, 1.f), -1.f, 1.f, minPw, 1.f - minPw);

// Advance phase
float deltaPhase = clamp(freq * APP->engine->getSampleTime(), 1e-6f, 0.5f);
float deltaPhase = clamp(freq * args.sampleTime, 1e-6f, 0.5f);
float oldPhase = phase;
phase += deltaPhase;

@@ -95,8 +95,8 @@ struct EvenVCO : Module {
triSquare += triSquareMinBlep.process();

// Integrate square for triangle
tri += 4.f * triSquare * freq * APP->engine->getSampleTime();
tri *= (1.f - 40.f * APP->engine->getSampleTime());
tri += 4.f * triSquare * freq * args.sampleTime;
tri *= (1.f - 40.f * args.sampleTime);

float sine = -std::cos(2*M_PI * phase);
float doubleSaw = (phase < 0.5) ? (-1.f + 4.f*phase) : (-1.f + 4.f*(phase - 0.5));


+ 9
- 9
src/Mixer.cpp View File

@@ -35,17 +35,17 @@ struct Mixer : Module {
params[CH4_PARAM].config(0.0, 1.0, 0.0, "Ch 4 level", "%", 0, 100);
}

void step() override {
float in1 = inputs[IN1_INPUT].value * params[CH1_PARAM].value;
float in2 = inputs[IN2_INPUT].value * params[CH2_PARAM].value;
float in3 = inputs[IN3_INPUT].value * params[CH3_PARAM].value;
float in4 = inputs[IN4_INPUT].value * params[CH4_PARAM].value;
void process(const ProcessArgs &args) override {
float in1 = inputs[IN1_INPUT].getVoltage() * params[CH1_PARAM].getValue();
float in2 = inputs[IN2_INPUT].getVoltage() * params[CH2_PARAM].getValue();
float in3 = inputs[IN3_INPUT].getVoltage() * params[CH3_PARAM].getValue();
float in4 = inputs[IN4_INPUT].getVoltage() * params[CH4_PARAM].getValue();

float out = in1 + in2 + in3 + in4;
outputs[OUT1_OUTPUT].value = out;
outputs[OUT2_OUTPUT].value = -out;
lights[OUT_POS_LIGHT].setBrightnessSmooth(out / 5.f);
lights[OUT_NEG_LIGHT].setBrightnessSmooth(-out / 5.f);
outputs[OUT1_OUTPUT].setVoltage(out);
outputs[OUT2_OUTPUT].setVoltage(-out);
lights[OUT_POS_LIGHT].setSmoothBrightness(out / 5.f, args.sampleTime);
lights[OUT_NEG_LIGHT].setSmoothBrightness(-out / 5.f, args.sampleTime);
}
};



+ 11
- 11
src/Rampage.cpp View File

@@ -4,7 +4,7 @@
static float shapeDelta(float delta, float tau, float shape) {
float lin = sgn(delta) * 10.f / tau;
if (shape < 0.f) {
float log = sgn(delta) * 40.f / tau / (std::abs(delta) + 1.f);
float log = sgn(delta) * 40.f / tau / (std::fabs(delta) + 1.f);
return crossfade(lin, log, -shape * 0.95f);
}
else {
@@ -95,7 +95,7 @@ struct Rampage : Module {
params[BALANCE_PARAM].config(0.0, 1.0, 0.5, "Balance");
}

void step() override {
void process(const ProcessArgs &args) override {
for (int c = 0; c < 2; c++) {
float in = inputs[IN_A_INPUT + c].value;
if (trigger[c].process(params[TRIGG_A_PARAM + c].value * 10.0 + inputs[TRIGG_A_INPUT + c].value / 2.0)) {
@@ -124,7 +124,7 @@ struct Rampage : Module {
float riseCv = params[RISE_A_PARAM + c].value - inputs[EXP_CV_A_INPUT + c].value / 10.0 + inputs[RISE_CV_A_INPUT + c].value / 10.0;
riseCv = clamp(riseCv, 0.0f, 1.0f);
float rise = minTime * std::pow(2.0, riseCv * 10.0);
out[c] += shapeDelta(delta, rise, shape) * APP->engine->getSampleTime();
out[c] += shapeDelta(delta, rise, shape) * args.sampleTime;
rising = (in - out[c] > 1e-3);
if (!rising) {
gate[c] = false;
@@ -135,7 +135,7 @@ struct Rampage : Module {
float fallCv = params[FALL_A_PARAM + c].value - inputs[EXP_CV_A_INPUT + c].value / 10.0 + inputs[FALL_CV_A_INPUT + c].value / 10.0;
fallCv = clamp(fallCv, 0.0f, 1.0f);
float fall = minTime * std::pow(2.0, fallCv * 10.0);
out[c] += shapeDelta(delta, fall, shape) * APP->engine->getSampleTime();
out[c] += shapeDelta(delta, fall, shape) * args.sampleTime;
falling = (in - out[c] < -1e-3);
if (!falling) {
// End of cycle, check if we should turn the gate back on (cycle mode)
@@ -155,11 +155,11 @@ struct Rampage : Module {

outputs[RISING_A_OUTPUT + c].value = (rising ? 10.0 : 0.0);
outputs[FALLING_A_OUTPUT + c].value = (falling ? 10.0 : 0.0);
lights[RISING_A_LIGHT + c].setBrightnessSmooth(rising ? 1.0 : 0.0);
lights[FALLING_A_LIGHT + c].setBrightnessSmooth(falling ? 1.0 : 0.0);
outputs[EOC_A_OUTPUT + c].value = (endOfCyclePulse[c].process(APP->engine->getSampleTime()) ? 10.0 : 0.0);
lights[RISING_A_LIGHT + c].setSmoothBrightness(rising ? 1.0 : 0.0, args.sampleTime);
lights[FALLING_A_LIGHT + c].setSmoothBrightness(falling ? 1.0 : 0.0, args.sampleTime);
outputs[EOC_A_OUTPUT + c].value = (endOfCyclePulse[c].process(args.sampleTime) ? 10.0 : 0.0);
outputs[OUT_A_OUTPUT + c].value = out[c];
lights[OUT_A_LIGHT + c].setBrightnessSmooth(out[c] / 10.0);
lights[OUT_A_LIGHT + c].setSmoothBrightness(out[c] / 10.0, args.sampleTime);
}

// Logic
@@ -174,9 +174,9 @@ struct Rampage : Module {
outputs[MIN_OUTPUT].value = std::min(a, b);
outputs[MAX_OUTPUT].value = std::max(a, b);
// Lights
lights[COMPARATOR_LIGHT].setBrightnessSmooth(outputs[COMPARATOR_OUTPUT].value / 10.0);
lights[MIN_LIGHT].setBrightnessSmooth(outputs[MIN_OUTPUT].value / 10.0);
lights[MAX_LIGHT].setBrightnessSmooth(outputs[MAX_OUTPUT].value / 10.0);
lights[COMPARATOR_LIGHT].setSmoothBrightness(outputs[COMPARATOR_OUTPUT].value / 10.0, args.sampleTime);
lights[MIN_LIGHT].setSmoothBrightness(outputs[MIN_OUTPUT].value / 10.0, args.sampleTime);
lights[MAX_LIGHT].setSmoothBrightness(outputs[MAX_OUTPUT].value / 10.0, args.sampleTime);
}
};



+ 5
- 5
src/SlewLimiter.cpp View File

@@ -28,7 +28,7 @@ struct SlewLimiter : Module {
params[FALL_PARAM].config(0.0, 1.0, 0.0, "Fall time");
}

void step() override {
void process(const ProcessArgs &args) override {
float in = inputs[IN_INPUT].value;
float shape = params[SHAPE_PARAM].value;

@@ -41,16 +41,16 @@ struct SlewLimiter : Module {
// Rise
if (in > out) {
float rise = inputs[RISE_INPUT].value / 10.f + params[RISE_PARAM].value;
float slew = slewMax * powf(slewMin / slewMax, rise);
out += slew * crossfade(1.f, shapeScale * (in - out), shape) * APP->engine->getSampleTime();
float slew = slewMax * std::pow(slewMin / slewMax, rise);
out += slew * crossfade(1.f, shapeScale * (in - out), shape) * args.sampleTime;
if (out > in)
out = in;
}
// Fall
else if (in < out) {
float fall = inputs[FALL_INPUT].value / 10.f + params[FALL_PARAM].value;
float slew = slewMax * powf(slewMin / slewMax, fall);
out -= slew * crossfade(1.f, shapeScale * (out - in), shape) * APP->engine->getSampleTime();
float slew = slewMax * std::pow(slewMin / slewMax, fall);
out -= slew * crossfade(1.f, shapeScale * (out - in), shape) * args.sampleTime;
if (out < in)
out = in;
}


+ 7
- 7
src/SpringReverb.cpp View File

@@ -64,7 +64,7 @@ struct SpringReverb : Module {
delete convolver;
}

void step() override {
void process(const ProcessArgs &args) override {
float in1 = inputs[IN1_INPUT].value;
float in2 = inputs[IN2_INPUT].value;
const float levelScale = 0.030;
@@ -74,7 +74,7 @@ struct SpringReverb : Module {
float dry = in1 * level1 + in2 * level2;

// HPF on dry
float dryCutoff = 200.0 * std::pow(20.0, params[HPF_PARAM].value) * APP->engine->getSampleTime();
float dryCutoff = 200.0 * std::pow(20.0, params[HPF_PARAM].value) * args.sampleTime;
dryFilter.setCutoff(dryCutoff);
dryFilter.process(dry);

@@ -91,7 +91,7 @@ struct SpringReverb : Module {
float output[BLOCK_SIZE];
// Convert input buffer
{
inputSrc.setRates(APP->engine->getSampleRate(), 48000);
inputSrc.setRates(args.sampleRate, 48000);
int inLen = inputBuffer.size();
int outLen = BLOCK_SIZE;
inputSrc.process(inputBuffer.startData(), &inLen, (dsp::Frame<1>*) input, &outLen);
@@ -103,7 +103,7 @@ struct SpringReverb : Module {

// Convert output buffer
{
outputSrc.setRates(48000, APP->engine->getSampleRate());
outputSrc.setRates(48000, args.sampleRate);
int inLen = BLOCK_SIZE;
int outLen = outputBuffer.capacity();
outputSrc.process((dsp::Frame<1>*) output, &inLen, outputBuffer.endData(), &outLen);
@@ -122,11 +122,11 @@ struct SpringReverb : Module {
outputs[MIX_OUTPUT].value = clamp(mix, -10.0f, 10.0f);

// Set lights
float lightRate = 5.0 * APP->engine->getSampleTime();
float lightRate = 5.0 * args.sampleTime;
vuFilter.setRate(lightRate);
vuFilter.process(std::abs(wet));
vuFilter.process(std::fabs(wet));
lightFilter.setRate(lightRate);
lightFilter.process(std::abs(dry*50.0));
lightFilter.process(std::fabs(dry*50.0));

float vuValue = vuFilter.peak();
for (int i = 0; i < 7; i++) {


Loading…
Cancel
Save