Browse Source

Fix modules to do lights the new way, after Rack bc619644.

tags/v0.5.0
Matt Demanett 7 years ago
parent
commit
454a59f738
6 changed files with 93 additions and 66 deletions
  1. +8
    -8
      src/8VERT.cpp
  2. +16
    -10
      src/ADSR.cpp
  3. +14
    -8
      src/LFO.cpp
  4. +24
    -21
      src/SEQ3.cpp
  5. +16
    -10
      src/Scope.cpp
  6. +15
    -9
      src/VCO.cpp

+ 8
- 8
src/8VERT.cpp View File

@@ -72,12 +72,12 @@ _8VERTWidget::_8VERTWidget() {
addOutput(createOutput<PJ301MPort>(Vec(86.393, 281.059), module, 6)); addOutput(createOutput<PJ301MPort>(Vec(86.393, 281.059), module, 6));
addOutput(createOutput<PJ301MPort>(Vec(86.393, 319.504), module, 7)); addOutput(createOutput<PJ301MPort>(Vec(86.393, 319.504), module, 7));


addChild(createValueLight<TinyLight<GreenRedPolarityLight>>(Vec(107.702, 50.414), &module->lights[0].value));
addChild(createValueLight<TinyLight<GreenRedPolarityLight>>(Vec(107.702, 88.859), &module->lights[1].value));
addChild(createValueLight<TinyLight<GreenRedPolarityLight>>(Vec(107.702, 127.304), &module->lights[2].value));
addChild(createValueLight<TinyLight<GreenRedPolarityLight>>(Vec(107.702, 165.745), &module->lights[3].value));
addChild(createValueLight<TinyLight<GreenRedPolarityLight>>(Vec(107.702, 204.19), &module->lights[4].value));
addChild(createValueLight<TinyLight<GreenRedPolarityLight>>(Vec(107.702, 242.635), &module->lights[5].value));
addChild(createValueLight<TinyLight<GreenRedPolarityLight>>(Vec(107.702, 281.076), &module->lights[6].value));
addChild(createValueLight<TinyLight<GreenRedPolarityLight>>(Vec(107.702, 319.521), &module->lights[7].value));
addChild(createLight<TinyLight<GreenRedLight>>(Vec(107.702, 50.414), module, 0));
addChild(createLight<TinyLight<GreenRedLight>>(Vec(107.702, 88.859), module, 1));
addChild(createLight<TinyLight<GreenRedLight>>(Vec(107.702, 127.304), module, 2));
addChild(createLight<TinyLight<GreenRedLight>>(Vec(107.702, 165.745), module, 3));
addChild(createLight<TinyLight<GreenRedLight>>(Vec(107.702, 204.19), module, 4));
addChild(createLight<TinyLight<GreenRedLight>>(Vec(107.702, 242.635), module, 5));
addChild(createLight<TinyLight<GreenRedLight>>(Vec(107.702, 281.076), module, 6));
addChild(createLight<TinyLight<GreenRedLight>>(Vec(107.702, 319.521), module, 7));
} }

+ 16
- 10
src/ADSR.cpp View File

@@ -23,13 +23,19 @@ struct ADSR : Module {
ENVELOPE_OUTPUT, ENVELOPE_OUTPUT,
NUM_OUTPUTS NUM_OUTPUTS
}; };
enum LightIds {
ATTACK_LIGHT,
DECAY_LIGHT,
SUSTAIN_LIGHT,
RELEASE_LIGHT,
NUM_LIGHTS
};


bool decaying = false; bool decaying = false;
float env = 0.0; float env = 0.0;
SchmittTrigger trigger; SchmittTrigger trigger;
float lights[4] = {};


ADSR() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {
ADSR() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
trigger.setThresholds(0.0, 1.0); trigger.setThresholds(0.0, 1.0);
} }
void step() override; void step() override;
@@ -43,10 +49,10 @@ void ADSR::step() {
float release = clampf(params[RELEASE_PARAM].value + inputs[RELEASE_PARAM].value / 10.0, 0.0, 1.0); float release = clampf(params[RELEASE_PARAM].value + inputs[RELEASE_PARAM].value / 10.0, 0.0, 1.0);


// Lights // Lights
lights[0] = 2.0*attack - 1.0;
lights[1] = 2.0*decay - 1.0;
lights[2] = 2.0*sustain - 1.0;
lights[3] = 2.0*release - 1.0;
lights[ATTACK_LIGHT].value = 2.0*attack - 1.0;
lights[DECAY_LIGHT].value = 2.0*decay - 1.0;
lights[SUSTAIN_LIGHT].value = 2.0*sustain - 1.0;
lights[RELEASE_LIGHT].value = 2.0*release - 1.0;


// Gate and trigger // Gate and trigger
bool gated = inputs[GATE_INPUT].value >= 1.0; bool gated = inputs[GATE_INPUT].value >= 1.0;
@@ -126,8 +132,8 @@ ADSRWidget::ADSRWidget() {
addInput(createInput<PJ301MPort>(Vec(48, 320), module, ADSR::TRIG_INPUT)); addInput(createInput<PJ301MPort>(Vec(48, 320), module, ADSR::TRIG_INPUT));
addOutput(createOutput<PJ301MPort>(Vec(87, 320), module, ADSR::ENVELOPE_OUTPUT)); addOutput(createOutput<PJ301MPort>(Vec(87, 320), module, ADSR::ENVELOPE_OUTPUT));


addChild(createValueLight<SmallLight<GreenRedPolarityLight>>(Vec(94, 41), &module->lights[0]));
addChild(createValueLight<SmallLight<GreenRedPolarityLight>>(Vec(94, 108), &module->lights[1]));
addChild(createValueLight<SmallLight<GreenRedPolarityLight>>(Vec(94, 175), &module->lights[2]));
addChild(createValueLight<SmallLight<GreenRedPolarityLight>>(Vec(94, 241), &module->lights[3]));
addChild(createLight<SmallLight<GreenRedLight>>(Vec(94, 41), module, ADSR::ATTACK_LIGHT));
addChild(createLight<SmallLight<GreenRedLight>>(Vec(94, 108), module, ADSR::DECAY_LIGHT));
addChild(createLight<SmallLight<GreenRedLight>>(Vec(94, 175), module, ADSR::SUSTAIN_LIGHT));
addChild(createLight<SmallLight<GreenRedLight>>(Vec(94, 241), module, ADSR::RELEASE_LIGHT));
} }

+ 14
- 8
src/LFO.cpp View File

@@ -90,11 +90,14 @@ struct LFO : Module {
SQR_OUTPUT, SQR_OUTPUT,
NUM_OUTPUTS NUM_OUTPUTS
}; };
enum LightIds {
PHASE_LIGHT,
NUM_LIGHTS
};


LFOGenerator generator; LFOGenerator generator;
float lights[1] = {};


LFO() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {}
LFO() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {}
void step() override; void step() override;
}; };


@@ -112,7 +115,7 @@ void LFO::step() {
outputs[SAW_OUTPUT].value = 5.0 * generator.saw(); outputs[SAW_OUTPUT].value = 5.0 * generator.saw();
outputs[SQR_OUTPUT].value = 5.0 * generator.sqr(); outputs[SQR_OUTPUT].value = 5.0 * generator.sqr();


lights[0] = generator.light();
lights[PHASE_LIGHT].value = generator.light();
} }




@@ -152,7 +155,7 @@ LFOWidget::LFOWidget() {
addOutput(createOutput<PJ301MPort>(Vec(80, 320), module, LFO::SAW_OUTPUT)); addOutput(createOutput<PJ301MPort>(Vec(80, 320), module, LFO::SAW_OUTPUT));
addOutput(createOutput<PJ301MPort>(Vec(114, 320), module, LFO::SQR_OUTPUT)); addOutput(createOutput<PJ301MPort>(Vec(114, 320), module, LFO::SQR_OUTPUT));


addChild(createValueLight<SmallLight<GreenRedPolarityLight>>(Vec(99, 42), &module->lights[0]));
addChild(createLight<SmallLight<GreenRedLight>>(Vec(99, 42), module, LFO::PHASE_LIGHT));
} }




@@ -176,11 +179,14 @@ struct LFO2 : Module {
INTERP_OUTPUT, INTERP_OUTPUT,
NUM_OUTPUTS NUM_OUTPUTS
}; };
enum LightIds {
PHASE_LIGHT,
NUM_LIGHTS
};


LFOGenerator generator; LFOGenerator generator;
float lights[1] = {};


LFO2() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {}
LFO2() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {}
void step() override; void step() override;
}; };


@@ -203,7 +209,7 @@ void LFO2::step() {
interp = crossf(generator.saw(), generator.sqr(), wave - 2.0); interp = crossf(generator.saw(), generator.sqr(), wave - 2.0);
outputs[INTERP_OUTPUT].value = 5.0 * interp; outputs[INTERP_OUTPUT].value = 5.0 * interp;


lights[0] = generator.light();
lights[PHASE_LIGHT].value = generator.light();
} }




@@ -237,5 +243,5 @@ LFO2Widget::LFO2Widget() {


addOutput(createOutput<PJ301MPort>(Vec(54, 319), module, LFO2::INTERP_OUTPUT)); addOutput(createOutput<PJ301MPort>(Vec(54, 319), module, LFO2::INTERP_OUTPUT));


addChild(createValueLight<SmallLight<GreenRedPolarityLight>>(Vec(68, 41), &module->lights[0]));
addChild(createLight<SmallLight<GreenRedLight>>(Vec(68, 41), module, LFO2::PHASE_LIGHT));
} }

+ 24
- 21
src/SEQ3.cpp View File

@@ -29,6 +29,14 @@ struct SEQ3 : Module {
GATE_OUTPUT, GATE_OUTPUT,
NUM_OUTPUTS = GATE_OUTPUT + 8 NUM_OUTPUTS = GATE_OUTPUT + 8
}; };
enum LightIds {
RUNNING_LIGHT,
RESET_LIGHT,
GATES_LIGHT,
ROW_LIGHTS,
GATE_LIGHTS = ROW_LIGHTS + 3,
NUM_LIGHTS = GATE_LIGHTS + 8
};


bool running = true; bool running = true;
SchmittTrigger clockTrigger; // for external clock SchmittTrigger clockTrigger; // for external clock
@@ -39,6 +47,7 @@ struct SEQ3 : Module {
float phase = 0.0; float phase = 0.0;
int index = 0; int index = 0;
bool gateState[8] = {}; bool gateState[8] = {};
float resetLight = 0.0;
float stepLights[8] = {}; float stepLights[8] = {};


enum GateMode { enum GateMode {
@@ -49,14 +58,7 @@ struct SEQ3 : Module {
GateMode gateMode = TRIGGER; GateMode gateMode = TRIGGER;
PulseGenerator gatePulse; PulseGenerator gatePulse;


// Lights
float runningLight = 0.0;
float resetLight = 0.0;
float gatesLight = 0.0;
float rowLights[3] = {};
float gateLights[8] = {};

SEQ3() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {}
SEQ3() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {}
void step() override; void step() override;


json_t *toJson() override { json_t *toJson() override {
@@ -122,7 +124,7 @@ void SEQ3::step() {
if (runningTrigger.process(params[RUN_PARAM].value)) { if (runningTrigger.process(params[RUN_PARAM].value)) {
running = !running; running = !running;
} }
runningLight = running ? 1.0 : 0.0;
lights[RUNNING_LIGHT].value = running ? 1.0 : 0.0;


bool nextStep = false; bool nextStep = false;


@@ -181,7 +183,7 @@ void SEQ3::step() {


outputs[GATE_OUTPUT + i].value = gateOn ? 10.0 : 0.0; outputs[GATE_OUTPUT + i].value = gateOn ? 10.0 : 0.0;
stepLights[i] -= stepLights[i] / lightLambda / engineGetSampleRate(); stepLights[i] -= stepLights[i] / lightLambda / engineGetSampleRate();
gateLights[i] = gateState[i] ? 1.0 - stepLights[i] : stepLights[i];
lights[GATE_LIGHTS + i].value = gateState[i] ? 1.0 - stepLights[i] : stepLights[i];
} }


// Rows // Rows
@@ -199,10 +201,11 @@ void SEQ3::step() {
outputs[ROW2_OUTPUT].value = row2; outputs[ROW2_OUTPUT].value = row2;
outputs[ROW3_OUTPUT].value = row3; outputs[ROW3_OUTPUT].value = row3;
outputs[GATES_OUTPUT].value = gatesOn ? 10.0 : 0.0; outputs[GATES_OUTPUT].value = gatesOn ? 10.0 : 0.0;
gatesLight = gatesOn ? 1.0 : 0.0;
rowLights[0] = row1;
rowLights[1] = row2;
rowLights[2] = row3;
lights[RESET_LIGHT].value = resetLight;
lights[GATES_LIGHT].value = gatesOn ? 1.0 : 0.0;
lights[ROW_LIGHTS].value = row1;
lights[ROW_LIGHTS + 1].value = row2;
lights[ROW_LIGHTS + 2].value = row3;
} }




@@ -225,14 +228,14 @@ SEQ3Widget::SEQ3Widget() {


addParam(createParam<RoundSmallBlackKnob>(Vec(18, 56), module, SEQ3::CLOCK_PARAM, -2.0, 6.0, 2.0)); addParam(createParam<RoundSmallBlackKnob>(Vec(18, 56), module, SEQ3::CLOCK_PARAM, -2.0, 6.0, 2.0));
addParam(createParam<LEDButton>(Vec(60, 61-1), module, SEQ3::RUN_PARAM, 0.0, 1.0, 0.0)); addParam(createParam<LEDButton>(Vec(60, 61-1), module, SEQ3::RUN_PARAM, 0.0, 1.0, 0.0));
addChild(createValueLight<SmallLight<GreenValueLight>>(Vec(65, 65), &module->runningLight));
addChild(createLight<SmallLight<GreenLight>>(Vec(65, 65), module, SEQ3::RUNNING_LIGHT));
addParam(createParam<LEDButton>(Vec(99, 61-1), module, SEQ3::RESET_PARAM, 0.0, 1.0, 0.0)); addParam(createParam<LEDButton>(Vec(99, 61-1), module, SEQ3::RESET_PARAM, 0.0, 1.0, 0.0));
addChild(createValueLight<SmallLight<GreenValueLight>>(Vec(104, 65), &module->resetLight));
addChild(createLight<SmallLight<GreenLight>>(Vec(104, 65), module, SEQ3::RESET_LIGHT));
addParam(createParam<RoundSmallBlackSnapKnob>(Vec(132, 56), module, SEQ3::STEPS_PARAM, 1.0, 8.0, 8.0)); addParam(createParam<RoundSmallBlackSnapKnob>(Vec(132, 56), module, SEQ3::STEPS_PARAM, 1.0, 8.0, 8.0));
addChild(createValueLight<SmallLight<GreenValueLight>>(Vec(180, 65), &module->gatesLight));
addChild(createValueLight<SmallLight<GreenValueLight>>(Vec(219, 65), &module->rowLights[0]));
addChild(createValueLight<SmallLight<GreenValueLight>>(Vec(257, 65), &module->rowLights[1]));
addChild(createValueLight<SmallLight<GreenValueLight>>(Vec(296, 65), &module->rowLights[2]));
addChild(createLight<SmallLight<GreenLight>>(Vec(180, 65), module, SEQ3::GATES_LIGHT));
addChild(createLight<SmallLight<GreenLight>>(Vec(219, 65), module, SEQ3::ROW_LIGHTS));
addChild(createLight<SmallLight<GreenLight>>(Vec(257, 65), module, SEQ3::ROW_LIGHTS + 1));
addChild(createLight<SmallLight<GreenLight>>(Vec(296, 65), module, SEQ3::ROW_LIGHTS + 2));


static const float portX[8] = {20, 58, 96, 135, 173, 212, 250, 289}; static const float portX[8] = {20, 58, 96, 135, 173, 212, 250, 289};
addInput(createInput<PJ301MPort>(Vec(portX[0]-1, 98), module, SEQ3::CLOCK_INPUT)); addInput(createInput<PJ301MPort>(Vec(portX[0]-1, 98), module, SEQ3::CLOCK_INPUT));
@@ -249,7 +252,7 @@ SEQ3Widget::SEQ3Widget() {
addParam(createParam<RoundSmallBlackKnob>(Vec(portX[i]-2, 198), module, SEQ3::ROW2_PARAM + i, 0.0, 6.0, 0.0)); addParam(createParam<RoundSmallBlackKnob>(Vec(portX[i]-2, 198), module, SEQ3::ROW2_PARAM + i, 0.0, 6.0, 0.0));
addParam(createParam<RoundSmallBlackKnob>(Vec(portX[i]-2, 240), module, SEQ3::ROW3_PARAM + i, 0.0, 6.0, 0.0)); addParam(createParam<RoundSmallBlackKnob>(Vec(portX[i]-2, 240), module, SEQ3::ROW3_PARAM + i, 0.0, 6.0, 0.0));
addParam(createParam<LEDButton>(Vec(portX[i]+2, 278-1), module, SEQ3::GATE_PARAM + i, 0.0, 1.0, 0.0)); addParam(createParam<LEDButton>(Vec(portX[i]+2, 278-1), module, SEQ3::GATE_PARAM + i, 0.0, 1.0, 0.0));
addChild(createValueLight<SmallLight<GreenValueLight>>(Vec(portX[i]+7, 282), &module->gateLights[i]));
addChild(createLight<SmallLight<GreenLight>>(Vec(portX[i]+7, 282), module, SEQ3::GATE_LIGHTS + i));
addOutput(createOutput<PJ301MPort>(Vec(portX[i]-1, 307), module, SEQ3::GATE_OUTPUT + i)); addOutput(createOutput<PJ301MPort>(Vec(portX[i]-1, 307), module, SEQ3::GATE_OUTPUT + i));
} }
} }


+ 16
- 10
src/Scope.cpp View File

@@ -26,6 +26,13 @@ struct Scope : Module {
enum OutputIds { enum OutputIds {
NUM_OUTPUTS NUM_OUTPUTS
}; };
enum LightIds {
LISSAJOUS_LIGHT,
NOT_LISSAJOUS_LIGHT, // FIXME: what should this be called?
EXTERNAL_LIGHT,
INTERNAL_LIGHT,
NUM_LIGHTS
};


float bufferX[BUFFER_SIZE] = {}; float bufferX[BUFFER_SIZE] = {};
float bufferY[BUFFER_SIZE] = {}; float bufferY[BUFFER_SIZE] = {};
@@ -36,10 +43,9 @@ struct Scope : Module {
SchmittTrigger extTrigger; SchmittTrigger extTrigger;
bool lissajous = false; bool lissajous = false;
bool external = false; bool external = false;
float lights[4] = {};
SchmittTrigger resetTrigger; SchmittTrigger resetTrigger;


Scope() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {}
Scope() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {}
void step() override; void step() override;


json_t *toJson() override { json_t *toJson() override {
@@ -71,14 +77,14 @@ void Scope::step() {
if (sumTrigger.process(params[LISSAJOUS_PARAM].value)) { if (sumTrigger.process(params[LISSAJOUS_PARAM].value)) {
lissajous = !lissajous; lissajous = !lissajous;
} }
lights[0] = lissajous ? 0.0 : 1.0;
lights[1] = lissajous ? 1.0 : 0.0;
lights[LISSAJOUS_LIGHT].value = lissajous ? 0.0 : 1.0;
lights[NOT_LISSAJOUS_LIGHT].value = lissajous ? 1.0 : 0.0;


if (extTrigger.process(params[EXTERNAL_PARAM].value)) { if (extTrigger.process(params[EXTERNAL_PARAM].value)) {
external = !external; external = !external;
} }
lights[2] = external ? 0.0 : 1.0;
lights[3] = external ? 1.0 : 0.0;
lights[EXTERNAL_LIGHT].value = external ? 0.0 : 1.0;
lights[INTERNAL_LIGHT].value = external ? 1.0 : 0.0;


// Compute time // Compute time
float deltaTime = powf(2.0, params[TIME_PARAM].value); float deltaTime = powf(2.0, params[TIME_PARAM].value);
@@ -332,8 +338,8 @@ ScopeWidget::ScopeWidget() {
addInput(createInput<PJ301MPort>(Vec(63, 319), module, Scope::Y_INPUT)); addInput(createInput<PJ301MPort>(Vec(63, 319), module, Scope::Y_INPUT));
addInput(createInput<PJ301MPort>(Vec(154, 319), module, Scope::TRIG_INPUT)); addInput(createInput<PJ301MPort>(Vec(154, 319), module, Scope::TRIG_INPUT));


addChild(createValueLight<TinyLight<GreenValueLight>>(Vec(104, 251), &module->lights[0]));
addChild(createValueLight<TinyLight<GreenValueLight>>(Vec(104, 296), &module->lights[1]));
addChild(createValueLight<TinyLight<GreenValueLight>>(Vec(150, 251), &module->lights[2]));
addChild(createValueLight<TinyLight<GreenValueLight>>(Vec(150, 296), &module->lights[3]));
addChild(createLight<TinyLight<GreenLight>>(Vec(104, 251), module, Scope::LISSAJOUS_LIGHT));
addChild(createLight<TinyLight<GreenLight>>(Vec(104, 296), module, Scope::NOT_LISSAJOUS_LIGHT));
addChild(createLight<TinyLight<GreenLight>>(Vec(150, 251), module, Scope::EXTERNAL_LIGHT));
addChild(createLight<TinyLight<GreenLight>>(Vec(150, 296), module, Scope::INTERNAL_LIGHT));
} }

+ 15
- 9
src/VCO.cpp
File diff suppressed because it is too large
View File


Loading…
Cancel
Save