Browse Source

Add labels to params. Update Unity to Rack v1 API.

tags/v1.0.1
Andrew Belt 6 years ago
parent
commit
c32f1cdef5
9 changed files with 87 additions and 90 deletions
  1. +3
    -2
      src/8vert.cpp
  2. +4
    -4
      src/ADSR.cpp
  3. +8
    -6
      src/LFO.cpp
  4. +6
    -4
      src/SEQ3.cpp
  5. +1
    -1
      src/Sum.cpp
  6. +45
    -38
      src/Unity.cpp
  7. +5
    -5
      src/VCF.cpp
  8. +8
    -6
      src/VCO.cpp
  9. +7
    -24
      src/Viz.cpp

+ 3
- 2
src/8vert.cpp View File

@@ -27,13 +27,14 @@ struct _8vert : Module {
} }


void step() override { void step() override {
float deltaTime = APP->engine->getSampleTime();
float lastIn = 10.f; float lastIn = 10.f;
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
lastIn = inputs[i].getNormalVoltage(lastIn); lastIn = inputs[i].getNormalVoltage(lastIn);
float out = lastIn * params[i].value; float out = lastIn * params[i].value;
outputs[i].value = out; outputs[i].value = out;
lights[2*i + 0].setBrightnessSmooth(std::max(0.f, out / 5.f));
lights[2*i + 1].setBrightnessSmooth(std::max(0.f, -out / 5.f));
lights[2*i + 0].setSmoothBrightness(out / 5.f, deltaTime);
lights[2*i + 1].setSmoothBrightness(-out / 5.f, deltaTime);
} }
} }
}; };


+ 4
- 4
src/ADSR.cpp View File

@@ -36,10 +36,10 @@ struct ADSR : Module {


ADSR() { ADSR() {
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);
params[ATTACK_PARAM].config(0.f, 1.f, 0.5f);
params[DECAY_PARAM].config(0.f, 1.f, 0.5f);
params[SUSTAIN_PARAM].config(0.f, 1.f, 0.5f);
params[RELEASE_PARAM].config(0.f, 1.f, 0.5f);
params[ATTACK_PARAM].config(0.f, 1.f, 0.5f, "Attack");
params[DECAY_PARAM].config(0.f, 1.f, 0.5f, "Decay");
params[SUSTAIN_PARAM].config(0.f, 1.f, 0.5f, "Sustain");
params[RELEASE_PARAM].config(0.f, 1.f, 0.5f, "Release");
} }


void step() override { void step() override {


+ 8
- 6
src/LFO.cpp View File

@@ -108,11 +108,12 @@ struct LFO : Module {
} }


void step() override { void step() override {
float deltaTime = APP->engine->getSampleTime();
oscillator.setPitch(params[FREQ_PARAM].value + params[FM1_PARAM].value * inputs[FM1_INPUT].value + params[FM2_PARAM].value * inputs[FM2_INPUT].value); oscillator.setPitch(params[FREQ_PARAM].value + params[FM1_PARAM].value * inputs[FM1_INPUT].value + params[FM2_PARAM].value * inputs[FM2_INPUT].value);
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(deltaTime);
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();
@@ -120,8 +121,8 @@ struct LFO : Module {
outputs[SAW_OUTPUT].value = 5.f * oscillator.saw(); outputs[SAW_OUTPUT].value = 5.f * oscillator.saw();
outputs[SQR_OUTPUT].value = 5.f * oscillator.sqr(); outputs[SQR_OUTPUT].value = 5.f * oscillator.sqr();


lights[PHASE_POS_LIGHT].setBrightnessSmooth(std::max(0.f, oscillator.light()));
lights[PHASE_NEG_LIGHT].setBrightnessSmooth(std::max(0.f, -oscillator.light()));
lights[PHASE_POS_LIGHT].setSmoothBrightness(oscillator.light(), deltaTime);
lights[PHASE_NEG_LIGHT].setSmoothBrightness(-oscillator.light(), deltaTime);
} }


}; };
@@ -202,10 +203,11 @@ struct LFO2 : Module {
} }


void step() override { void step() override {
float deltaTime = APP->engine->getSampleTime();
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(deltaTime);
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;
@@ -219,8 +221,8 @@ struct LFO2 : Module {
interp = crossfade(oscillator.saw(), oscillator.sqr(), wave - 2.f); interp = crossfade(oscillator.saw(), oscillator.sqr(), wave - 2.f);
outputs[INTERP_OUTPUT].value = 5.f * interp; outputs[INTERP_OUTPUT].value = 5.f * interp;


lights[PHASE_POS_LIGHT].setBrightnessSmooth(std::max(0.f, oscillator.light()));
lights[PHASE_NEG_LIGHT].setBrightnessSmooth(std::max(0.f, -oscillator.light()));
lights[PHASE_POS_LIGHT].setSmoothBrightness(oscillator.light(), deltaTime);
lights[PHASE_NEG_LIGHT].setSmoothBrightness(-oscillator.light(), deltaTime);
} }
}; };




+ 6
- 4
src/SEQ3.cpp View File

@@ -118,6 +118,8 @@ struct SEQ3 : Module {
} }


void step() override { void step() override {
float deltaTime = APP->engine->getSampleTime();

// Run // Run
if (runningTrigger.process(params[RUN_PARAM].value)) { if (runningTrigger.process(params[RUN_PARAM].value)) {
running = !running; running = !running;
@@ -135,7 +137,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 * deltaTime;
if (phase >= 1.0f) { if (phase >= 1.0f) {
setIndex(index + 1); setIndex(index + 1);
} }
@@ -154,7 +156,7 @@ struct SEQ3 : Module {
gates[i] = !gates[i]; gates[i] = !gates[i];
} }
outputs[GATE_OUTPUT + i].value = (running && gateIn && i == index && gates[i]) ? 10.0f : 0.0f; outputs[GATE_OUTPUT + i].value = (running && gateIn && i == index && gates[i]) ? 10.0f : 0.0f;
lights[GATE_LIGHTS + i].setBrightnessSmooth((gateIn && i == index) ? (gates[i] ? 1.f : 0.33) : (gates[i] ? 0.66 : 0.0));
lights[GATE_LIGHTS + i].setSmoothBrightness((gateIn && i == index) ? (gates[i] ? 1.f : 0.33) : (gates[i] ? 0.66 : 0.0), deltaTime);
} }


// Outputs // Outputs
@@ -163,8 +165,8 @@ struct SEQ3 : Module {
outputs[ROW3_OUTPUT].value = params[ROW3_PARAM + index].value; outputs[ROW3_OUTPUT].value = params[ROW3_PARAM + index].value;
outputs[GATES_OUTPUT].value = (gateIn && gates[index]) ? 10.0f : 0.0f; outputs[GATES_OUTPUT].value = (gateIn && gates[index]) ? 10.0f : 0.0f;
lights[RUNNING_LIGHT].value = (running); lights[RUNNING_LIGHT].value = (running);
lights[RESET_LIGHT].setBrightnessSmooth(resetTrigger.isHigh());
lights[GATES_LIGHT].setBrightnessSmooth(gateIn);
lights[RESET_LIGHT].setSmoothBrightness(resetTrigger.isHigh(), deltaTime);
lights[GATES_LIGHT].setSmoothBrightness(gateIn, deltaTime);
lights[ROW_LIGHTS].value = outputs[ROW1_OUTPUT].value / 10.0f; lights[ROW_LIGHTS].value = outputs[ROW1_OUTPUT].value / 10.0f;
lights[ROW_LIGHTS + 1].value = outputs[ROW2_OUTPUT].value / 10.0f; lights[ROW_LIGHTS + 1].value = outputs[ROW2_OUTPUT].value / 10.0f;
lights[ROW_LIGHTS + 2].value = outputs[ROW3_OUTPUT].value / 10.0f; lights[ROW_LIGHTS + 2].value = outputs[ROW3_OUTPUT].value / 10.0f;


+ 1
- 1
src/Sum.cpp View File

@@ -21,7 +21,7 @@ struct Sum : Module {
}; };


int frame = 0; int frame = 0;
dsp::VUMeter2 vuMeter;
dsp::VuMeter2 vuMeter;


Sum() { Sum() {
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);


+ 45
- 38
src/Unity.cpp View File

@@ -8,9 +8,8 @@ struct Unity : Module {
NUM_PARAMS NUM_PARAMS
}; };
enum InputIds { enum InputIds {
IN1_INPUT,
IN2_INPUT = IN1_INPUT + 6,
NUM_INPUTS = IN2_INPUT + 6
ENUMS(IN_INPUTS, 2 * 6),
NUM_INPUTS
}; };
enum OutputIds { enum OutputIds {
MIX1_OUTPUT, MIX1_OUTPUT,
@@ -20,28 +19,32 @@ struct Unity : Module {
NUM_OUTPUTS NUM_OUTPUTS
}; };
enum LightIds { enum LightIds {
VU1_LIGHT,
VU2_LIGHT = VU1_LIGHT + 5,
NUM_LIGHTS = VU2_LIGHT + 5
ENUMS(VU_LIGHTS, 2 * 5),
NUM_LIGHTS
}; };


bool merge = false; bool merge = false;
dsp::VuMeter2 vuMeters[2];
dsp::Counter vuCounter;


Unity() { Unity() {
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);
params[AVG1_PARAM].config(0.0, 1.0, 0.0, "Ch 1 average mode"); params[AVG1_PARAM].config(0.0, 1.0, 0.0, "Ch 1 average mode");
params[AVG2_PARAM].config(0.0, 1.0, 0.0, "Ch 2 average mode"); params[AVG2_PARAM].config(0.0, 1.0, 0.0, "Ch 2 average mode");

vuCounter.setPeriod(256);
} }


void step() override { void step() override {
float deltaTime = APP->engine->getSampleTime();
float mix[2] = {}; float mix[2] = {};
int count[2] = {}; int count[2] = {};


for (int i = 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
// Inputs // Inputs
for (int j = 0; j < 6; j++) { for (int j = 0; j < 6; j++) {
mix[i] += inputs[IN1_INPUT + 6*i + j].value;
if (inputs[IN1_INPUT + 6*i + j].active)
mix[i] += inputs[IN_INPUTS + 6 * i + j].value;
if (inputs[IN_INPUTS + 6 * i + j].active)
count[i]++; count[i]++;
} }
} }
@@ -56,18 +59,22 @@ struct Unity : Module {


for (int i = 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
// Params // Params
if ((int) params[AVG1_PARAM + i].value == 1 && count[i] > 0)
if (count[i] > 0 && (int) std::round(params[AVG1_PARAM + i].value) == 1)
mix[i] /= count[i]; mix[i] /= count[i];


// Outputs // Outputs
outputs[MIX1_OUTPUT + 2*i].value = mix[i];
outputs[INV1_OUTPUT + 2*i].value = -mix[i];
outputs[MIX1_OUTPUT + 2 * i].value = mix[i];
outputs[INV1_OUTPUT + 2 * i].value = -mix[i];
vuMeters[i].process(deltaTime, mix[i] / 10.f);
}

if (vuCounter.process()) {
// Lights // Lights
dsp::VUMeter vuMeter;
vuMeter.dBInterval = 6.0f;
vuMeter.setValue(mix[i] / 10.0f);
for (int j = 0; j < 5; j++) {
lights[VU1_LIGHT + 5*i + j].setBrightnessSmooth(vuMeter.getBrightness(j));
for (int i = 0; i < 2; i++) {
lights[VU_LIGHTS + 5 * i + 0].setBrightness(vuMeters[i].getBrightness(0.f, 0.f));
for (int j = 1; j < 5; j++) {
lights[VU_LIGHTS + 5 * i + j].setBrightness(vuMeters[i].getBrightness(-6.f * (j + 1), -6.f * j));
}
} }
} }
} }
@@ -116,34 +123,34 @@ struct UnityWidget : ModuleWidget {
addParam(createParam<CKSS>(mm2px(Vec(12.867, 52.961)), module, Unity::AVG1_PARAM)); addParam(createParam<CKSS>(mm2px(Vec(12.867, 52.961)), module, Unity::AVG1_PARAM));
addParam(createParam<CKSS>(mm2px(Vec(12.867, 107.006)), module, Unity::AVG2_PARAM)); addParam(createParam<CKSS>(mm2px(Vec(12.867, 107.006)), module, Unity::AVG2_PARAM));


addInput(createInput<PJ301MPort>(mm2px(Vec(2.361, 17.144)), module, Unity::IN1_INPUT + 0));
addInput(createInput<PJ301MPort>(mm2px(Vec(19.907, 17.144)), module, Unity::IN1_INPUT + 1));
addInput(createInput<PJ301MPort>(mm2px(Vec(2.361, 28.145)), module, Unity::IN1_INPUT + 2));
addInput(createInput<PJ301MPort>(mm2px(Vec(19.907, 28.145)), module, Unity::IN1_INPUT + 3));
addInput(createInput<PJ301MPort>(mm2px(Vec(2.361, 39.145)), module, Unity::IN1_INPUT + 4));
addInput(createInput<PJ301MPort>(mm2px(Vec(19.907, 39.145)), module, Unity::IN1_INPUT + 5));
addInput(createInput<PJ301MPort>(mm2px(Vec(2.361, 71.145)), module, Unity::IN2_INPUT + 0));
addInput(createInput<PJ301MPort>(mm2px(Vec(19.907, 71.145)), module, Unity::IN2_INPUT + 1));
addInput(createInput<PJ301MPort>(mm2px(Vec(2.361, 82.145)), module, Unity::IN2_INPUT + 2));
addInput(createInput<PJ301MPort>(mm2px(Vec(19.907, 82.145)), module, Unity::IN2_INPUT + 3));
addInput(createInput<PJ301MPort>(mm2px(Vec(2.361, 93.144)), module, Unity::IN2_INPUT + 4));
addInput(createInput<PJ301MPort>(mm2px(Vec(19.907, 93.144)), module, Unity::IN2_INPUT + 5));
addInput(createInput<PJ301MPort>(mm2px(Vec(2.361, 17.144)), module, Unity::IN_INPUTS + 0 * 6 + 0));
addInput(createInput<PJ301MPort>(mm2px(Vec(19.907, 17.144)), module, Unity::IN_INPUTS + 0 * 6 + 1));
addInput(createInput<PJ301MPort>(mm2px(Vec(2.361, 28.145)), module, Unity::IN_INPUTS + 0 * 6 + 2));
addInput(createInput<PJ301MPort>(mm2px(Vec(19.907, 28.145)), module, Unity::IN_INPUTS + 0 * 6 + 3));
addInput(createInput<PJ301MPort>(mm2px(Vec(2.361, 39.145)), module, Unity::IN_INPUTS + 0 * 6 + 4));
addInput(createInput<PJ301MPort>(mm2px(Vec(19.907, 39.145)), module, Unity::IN_INPUTS + 0 * 6 + 5));
addInput(createInput<PJ301MPort>(mm2px(Vec(2.361, 71.145)), module, Unity::IN_INPUTS + 1 * 6 + 0));
addInput(createInput<PJ301MPort>(mm2px(Vec(19.907, 71.145)), module, Unity::IN_INPUTS + 1 * 6 + 1));
addInput(createInput<PJ301MPort>(mm2px(Vec(2.361, 82.145)), module, Unity::IN_INPUTS + 1 * 6 + 2));
addInput(createInput<PJ301MPort>(mm2px(Vec(19.907, 82.145)), module, Unity::IN_INPUTS + 1 * 6 + 3));
addInput(createInput<PJ301MPort>(mm2px(Vec(2.361, 93.144)), module, Unity::IN_INPUTS + 1 * 6 + 4));
addInput(createInput<PJ301MPort>(mm2px(Vec(19.907, 93.144)), module, Unity::IN_INPUTS + 1 * 6 + 5));


addOutput(createOutput<PJ301MPort>(mm2px(Vec(2.361, 54.15)), module, Unity::MIX1_OUTPUT)); addOutput(createOutput<PJ301MPort>(mm2px(Vec(2.361, 54.15)), module, Unity::MIX1_OUTPUT));
addOutput(createOutput<PJ301MPort>(mm2px(Vec(19.907, 54.15)), module, Unity::INV1_OUTPUT)); addOutput(createOutput<PJ301MPort>(mm2px(Vec(19.907, 54.15)), module, Unity::INV1_OUTPUT));
addOutput(createOutput<PJ301MPort>(mm2px(Vec(2.361, 108.144)), module, Unity::MIX2_OUTPUT)); addOutput(createOutput<PJ301MPort>(mm2px(Vec(2.361, 108.144)), module, Unity::MIX2_OUTPUT));
addOutput(createOutput<PJ301MPort>(mm2px(Vec(19.907, 108.144)), module, Unity::INV2_OUTPUT)); addOutput(createOutput<PJ301MPort>(mm2px(Vec(19.907, 108.144)), module, Unity::INV2_OUTPUT));


addChild(createLight<MediumLight<RedLight>>(mm2px(Vec(13.652, 19.663)), module, Unity::VU1_LIGHT + 0));
addChild(createLight<MediumLight<YellowLight>>(mm2px(Vec(13.652, 25.163)), module, Unity::VU1_LIGHT + 1));
addChild(createLight<MediumLight<GreenLight>>(mm2px(Vec(13.652, 30.663)), module, Unity::VU1_LIGHT + 2));
addChild(createLight<MediumLight<GreenLight>>(mm2px(Vec(13.652, 36.162)), module, Unity::VU1_LIGHT + 3));
addChild(createLight<MediumLight<GreenLight>>(mm2px(Vec(13.652, 41.662)), module, Unity::VU1_LIGHT + 4));
addChild(createLight<MediumLight<RedLight>>(mm2px(Vec(13.652, 73.663)), module, Unity::VU2_LIGHT + 0));
addChild(createLight<MediumLight<YellowLight>>(mm2px(Vec(13.652, 79.163)), module, Unity::VU2_LIGHT + 1));
addChild(createLight<MediumLight<GreenLight>>(mm2px(Vec(13.652, 84.663)), module, Unity::VU2_LIGHT + 2));
addChild(createLight<MediumLight<GreenLight>>(mm2px(Vec(13.652, 90.162)), module, Unity::VU2_LIGHT + 3));
addChild(createLight<MediumLight<GreenLight>>(mm2px(Vec(13.652, 95.662)), module, Unity::VU2_LIGHT + 4));
addChild(createLight<MediumLight<RedLight>>(mm2px(Vec(13.652, 19.663)), module, Unity::VU_LIGHTS + 0 * 5 + 0));
addChild(createLight<MediumLight<YellowLight>>(mm2px(Vec(13.652, 25.163)), module, Unity::VU_LIGHTS + 0 * 5 + 1));
addChild(createLight<MediumLight<GreenLight>>(mm2px(Vec(13.652, 30.663)), module, Unity::VU_LIGHTS + 0 * 5 + 2));
addChild(createLight<MediumLight<GreenLight>>(mm2px(Vec(13.652, 36.162)), module, Unity::VU_LIGHTS + 0 * 5 + 3));
addChild(createLight<MediumLight<GreenLight>>(mm2px(Vec(13.652, 41.662)), module, Unity::VU_LIGHTS + 0 * 5 + 4));
addChild(createLight<MediumLight<RedLight>>(mm2px(Vec(13.652, 73.663)), module, Unity::VU_LIGHTS + 1 * 5 + 0));
addChild(createLight<MediumLight<YellowLight>>(mm2px(Vec(13.652, 79.163)), module, Unity::VU_LIGHTS + 1 * 5 + 1));
addChild(createLight<MediumLight<GreenLight>>(mm2px(Vec(13.652, 84.663)), module, Unity::VU_LIGHTS + 1 * 5 + 2));
addChild(createLight<MediumLight<GreenLight>>(mm2px(Vec(13.652, 90.162)), module, Unity::VU_LIGHTS + 1 * 5 + 3));
addChild(createLight<MediumLight<GreenLight>>(mm2px(Vec(13.652, 95.662)), module, Unity::VU_LIGHTS + 1 * 5 + 4));
} }


void appendContextMenu(Menu *menu) override { void appendContextMenu(Menu *menu) override {


+ 5
- 5
src/VCF.cpp View File

@@ -80,11 +80,11 @@ struct VCF : Module {


VCF() { VCF() {
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS); config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS);
params[FREQ_PARAM].config(0.f, 1.f, 0.5f);
params[FINE_PARAM].config(0.f, 1.f, 0.5f);
params[RES_PARAM].config(0.f, 1.f, 0.f);
params[FREQ_CV_PARAM].config(-1.f, 1.f, 0.f);
params[DRIVE_PARAM].config(0.f, 1.f, 0.f);
params[FREQ_PARAM].config(0.f, 1.f, 0.5f, "Frequency");
params[FINE_PARAM].config(0.f, 1.f, 0.5f, "Fine frequency");
params[RES_PARAM].config(0.f, 1.f, 0.f, "Resonance");
params[FREQ_CV_PARAM].config(-1.f, 1.f, 0.f, "Frequency modulation");
params[DRIVE_PARAM].config(0.f, 1.f, 0.f, "Drive");
} }


void onReset() override { void onReset() override {


+ 8
- 6
src/VCO.cpp View File

@@ -205,6 +205,7 @@ struct VCO : Module {
} }


void step() override { void step() override {
float deltaTime = APP->engine->getSampleTime();
oscillator.analog = params[MODE_PARAM].value > 0.f; oscillator.analog = params[MODE_PARAM].value > 0.f;
oscillator.soft = params[SYNC_PARAM].value <= 0.f; oscillator.soft = params[SYNC_PARAM].value <= 0.f;


@@ -217,7 +218,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(deltaTime, inputs[SYNC_INPUT].value);


// Set output // Set output
if (outputs[SIN_OUTPUT].active) if (outputs[SIN_OUTPUT].active)
@@ -229,8 +230,8 @@ struct VCO : Module {
if (outputs[SQR_OUTPUT].active) if (outputs[SQR_OUTPUT].active)
outputs[SQR_OUTPUT].value = 5.f * oscillator.sqr(); outputs[SQR_OUTPUT].value = 5.f * oscillator.sqr();


lights[PHASE_POS_LIGHT].setBrightnessSmooth(std::fmax(0.f, oscillator.light()));
lights[PHASE_NEG_LIGHT].setBrightnessSmooth(std::fmax(0.f, -oscillator.light()));
lights[PHASE_POS_LIGHT].setSmoothBrightness(oscillator.light(), deltaTime);
lights[PHASE_NEG_LIGHT].setSmoothBrightness(-oscillator.light(), deltaTime);
} }
}; };


@@ -309,6 +310,7 @@ struct VCO2 : Module {
} }


void step() override { void step() override {
float deltaTime = APP->engine->getSampleTime();
oscillator.analog = params[MODE_PARAM].value > 0.f; oscillator.analog = params[MODE_PARAM].value > 0.f;
oscillator.soft = params[SYNC_PARAM].value <= 0.f; oscillator.soft = params[SYNC_PARAM].value <= 0.f;


@@ -316,7 +318,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(deltaTime, 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);
@@ -329,8 +331,8 @@ struct VCO2 : Module {
out = crossfade(oscillator.saw(), oscillator.sqr(), wave - 2.f); out = crossfade(oscillator.saw(), oscillator.sqr(), wave - 2.f);
outputs[OUT_OUTPUT].value = 5.f * out; outputs[OUT_OUTPUT].value = 5.f * out;


lights[PHASE_POS_LIGHT].setBrightnessSmooth(std::fmax(0.f, oscillator.light()));
lights[PHASE_NEG_LIGHT].setBrightnessSmooth(std::fmax(0.f, -oscillator.light()));
lights[PHASE_POS_LIGHT].setSmoothBrightness(oscillator.light(), deltaTime);
lights[PHASE_NEG_LIGHT].setSmoothBrightness(-oscillator.light(), deltaTime);
} }
}; };




+ 7
- 24
src/Viz.cpp View File

@@ -18,43 +18,26 @@ struct Viz : Module {
}; };


int channels = 0; int channels = 0;
dsp::VUMeter2 vuMeter[16];
int frame = 0; int frame = 0;
dsp::Counter counter;


Viz() { Viz() {
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);


for (int c = 0; c < 16; c++) {
vuMeter[c].lambda = 1 / 0.1f;
}
counter.period = 16;
} }


void step() override { void step() override {
if (frame % 16 == 0) {
if (counter.process()) {
channels = inputs[POLY_INPUT].getChannels(); channels = inputs[POLY_INPUT].getChannels();
float deltaTime = APP->engine->getSampleTime() * 16;
float deltaTime = APP->engine->getSampleTime() * counter.period;


// Process VU meters
for (int c = 0; c < channels; c++) {
float value = inputs[POLY_INPUT].getVoltage(c) / 10.f;
vuMeter[c].process(deltaTime, value);
}
for (int c = channels; c < 16; c++) {
vuMeter[c].reset();
}
}

if (frame % 256 == 0) {
// Set lights
for (int c = 0; c < 16; c++) { for (int c = 0; c < 16; c++) {
float green = vuMeter[c].getBrightness(-24.f, -6.f);
float red = vuMeter[c].getBrightness(-6.f, 0.f);
lights[VU_LIGHTS + c*2 + 0].setBrightness(green - red);
lights[VU_LIGHTS + c*2 + 1].setBrightness(red);
float v = inputs[POLY_INPUT].getVoltage(c) / 10.f;
lights[VU_LIGHTS + c*2 + 0].setSmoothBrightness(v, deltaTime);
lights[VU_LIGHTS + c*2 + 1].setSmoothBrightness(-v, deltaTime);
} }
} }

frame++;
} }
}; };




Loading…
Cancel
Save