@@ -27,13 +27,14 @@ struct _8vert : Module { | |||
} | |||
void step() override { | |||
float deltaTime = APP->engine->getSampleTime(); | |||
float lastIn = 10.f; | |||
for (int i = 0; i < 8; i++) { | |||
lastIn = inputs[i].getNormalVoltage(lastIn); | |||
float out = lastIn * params[i].value; | |||
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); | |||
} | |||
} | |||
}; | |||
@@ -36,10 +36,10 @@ struct ADSR : Module { | |||
ADSR() { | |||
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 { | |||
@@ -108,11 +108,12 @@ struct LFO : Module { | |||
} | |||
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.setPulseWidth(params[PW_PARAM].value + params[PWM_PARAM].value * inputs[PW_INPUT].value / 10.f); | |||
oscillator.offset = (params[OFFSET_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); | |||
outputs[SIN_OUTPUT].value = 5.f * oscillator.sin(); | |||
@@ -120,8 +121,8 @@ struct LFO : Module { | |||
outputs[SAW_OUTPUT].value = 5.f * oscillator.saw(); | |||
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 { | |||
float deltaTime = APP->engine->getSampleTime(); | |||
oscillator.setPitch(params[FREQ_PARAM].value + params[FM_PARAM].value * inputs[FM_INPUT].value); | |||
oscillator.offset = (params[OFFSET_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); | |||
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); | |||
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); | |||
} | |||
}; | |||
@@ -118,6 +118,8 @@ struct SEQ3 : Module { | |||
} | |||
void step() override { | |||
float deltaTime = APP->engine->getSampleTime(); | |||
// Run | |||
if (runningTrigger.process(params[RUN_PARAM].value)) { | |||
running = !running; | |||
@@ -135,7 +137,7 @@ struct SEQ3 : Module { | |||
else { | |||
// Internal clock | |||
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) { | |||
setIndex(index + 1); | |||
} | |||
@@ -154,7 +156,7 @@ struct SEQ3 : Module { | |||
gates[i] = !gates[i]; | |||
} | |||
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 | |||
@@ -163,8 +165,8 @@ struct SEQ3 : Module { | |||
outputs[ROW3_OUTPUT].value = params[ROW3_PARAM + index].value; | |||
outputs[GATES_OUTPUT].value = (gateIn && gates[index]) ? 10.0f : 0.0f; | |||
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 + 1].value = outputs[ROW2_OUTPUT].value / 10.0f; | |||
lights[ROW_LIGHTS + 2].value = outputs[ROW3_OUTPUT].value / 10.0f; | |||
@@ -21,7 +21,7 @@ struct Sum : Module { | |||
}; | |||
int frame = 0; | |||
dsp::VUMeter2 vuMeter; | |||
dsp::VuMeter2 vuMeter; | |||
Sum() { | |||
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
@@ -8,9 +8,8 @@ struct Unity : Module { | |||
NUM_PARAMS | |||
}; | |||
enum InputIds { | |||
IN1_INPUT, | |||
IN2_INPUT = IN1_INPUT + 6, | |||
NUM_INPUTS = IN2_INPUT + 6 | |||
ENUMS(IN_INPUTS, 2 * 6), | |||
NUM_INPUTS | |||
}; | |||
enum OutputIds { | |||
MIX1_OUTPUT, | |||
@@ -20,28 +19,32 @@ struct Unity : Module { | |||
NUM_OUTPUTS | |||
}; | |||
enum LightIds { | |||
VU1_LIGHT, | |||
VU2_LIGHT = VU1_LIGHT + 5, | |||
NUM_LIGHTS = VU2_LIGHT + 5 | |||
ENUMS(VU_LIGHTS, 2 * 5), | |||
NUM_LIGHTS | |||
}; | |||
bool merge = false; | |||
dsp::VuMeter2 vuMeters[2]; | |||
dsp::Counter vuCounter; | |||
Unity() { | |||
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
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"); | |||
vuCounter.setPeriod(256); | |||
} | |||
void step() override { | |||
float deltaTime = APP->engine->getSampleTime(); | |||
float mix[2] = {}; | |||
int count[2] = {}; | |||
for (int i = 0; i < 2; i++) { | |||
// Inputs | |||
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]++; | |||
} | |||
} | |||
@@ -56,18 +59,22 @@ struct Unity : Module { | |||
for (int i = 0; i < 2; i++) { | |||
// 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]; | |||
// 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 | |||
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, 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(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(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 { | |||
@@ -80,11 +80,11 @@ struct VCF : Module { | |||
VCF() { | |||
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 { | |||
@@ -205,6 +205,7 @@ struct VCO : Module { | |||
} | |||
void step() override { | |||
float deltaTime = APP->engine->getSampleTime(); | |||
oscillator.analog = params[MODE_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.syncEnabled = inputs[SYNC_INPUT].active; | |||
oscillator.process(APP->engine->getSampleTime(), inputs[SYNC_INPUT].value); | |||
oscillator.process(deltaTime, inputs[SYNC_INPUT].value); | |||
// Set output | |||
if (outputs[SIN_OUTPUT].active) | |||
@@ -229,8 +230,8 @@ struct VCO : Module { | |||
if (outputs[SQR_OUTPUT].active) | |||
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 { | |||
float deltaTime = APP->engine->getSampleTime(); | |||
oscillator.analog = params[MODE_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.syncEnabled = inputs[SYNC_INPUT].active; | |||
oscillator.process(APP->engine->getSampleTime(), inputs[SYNC_INPUT].value); | |||
oscillator.process(deltaTime, inputs[SYNC_INPUT].value); | |||
// Set output | |||
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); | |||
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); | |||
} | |||
}; | |||
@@ -18,43 +18,26 @@ struct Viz : Module { | |||
}; | |||
int channels = 0; | |||
dsp::VUMeter2 vuMeter[16]; | |||
int frame = 0; | |||
dsp::Counter counter; | |||
Viz() { | |||
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 { | |||
if (frame % 16 == 0) { | |||
if (counter.process()) { | |||
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++) { | |||
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++; | |||
} | |||
}; | |||