|
@@ -24,9 +24,9 @@ struct Links : Module { |
|
|
NUM_OUTPUTS |
|
|
NUM_OUTPUTS |
|
|
}; |
|
|
}; |
|
|
enum LightIds { |
|
|
enum LightIds { |
|
|
A_POS_LIGHT, A_NEG_LIGHT, |
|
|
|
|
|
B_POS_LIGHT, B_NEG_LIGHT, |
|
|
|
|
|
C_POS_LIGHT, C_NEG_LIGHT, |
|
|
|
|
|
|
|
|
ENUMS(A_LIGHT, 2), |
|
|
|
|
|
ENUMS(B_LIGHT, 2), |
|
|
|
|
|
ENUMS(C_LIGHT, 2), |
|
|
NUM_LIGHTS |
|
|
NUM_LIGHTS |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
@@ -35,23 +35,50 @@ struct Links : Module { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void process(const ProcessArgs& args) override { |
|
|
void process(const ProcessArgs& args) override { |
|
|
float inA = inputs[A1_INPUT].getVoltage(); |
|
|
|
|
|
float inB = inputs[B1_INPUT].getVoltage() + inputs[B2_INPUT].getVoltage(); |
|
|
|
|
|
float inC = inputs[C1_INPUT].getVoltage() + inputs[C2_INPUT].getVoltage() + inputs[C3_INPUT].getVoltage(); |
|
|
|
|
|
|
|
|
// Section A |
|
|
|
|
|
{ |
|
|
|
|
|
int channels = std::max(inputs[A1_INPUT].getChannels(), 1); |
|
|
|
|
|
float in[16]; |
|
|
|
|
|
for (int c = 0; c < channels; c++) { |
|
|
|
|
|
in[c] = inputs[A1_INPUT].getVoltage(c); |
|
|
|
|
|
outputs[A1_OUTPUT].setVoltage(in[c], c); |
|
|
|
|
|
outputs[A2_OUTPUT].setVoltage(in[c], c); |
|
|
|
|
|
outputs[A3_OUTPUT].setVoltage(in[c], c); |
|
|
|
|
|
} |
|
|
|
|
|
outputs[A1_OUTPUT].setChannels(channels); |
|
|
|
|
|
outputs[A2_OUTPUT].setChannels(channels); |
|
|
|
|
|
outputs[A3_OUTPUT].setChannels(channels); |
|
|
|
|
|
lights[A_LIGHT + 0].setSmoothBrightness(in[0] / 5.f, args.sampleTime); |
|
|
|
|
|
lights[A_LIGHT + 1].setSmoothBrightness(-in[0] / 5.f, args.sampleTime); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
outputs[A1_OUTPUT].setVoltage(inA); |
|
|
|
|
|
outputs[A2_OUTPUT].setVoltage(inA); |
|
|
|
|
|
outputs[A3_OUTPUT].setVoltage(inA); |
|
|
|
|
|
outputs[B1_OUTPUT].setVoltage(inB); |
|
|
|
|
|
outputs[B2_OUTPUT].setVoltage(inB); |
|
|
|
|
|
outputs[C1_OUTPUT].setVoltage(inC); |
|
|
|
|
|
|
|
|
// Section B |
|
|
|
|
|
{ |
|
|
|
|
|
int channels = std::max(std::max(inputs[B1_INPUT].getChannels(), inputs[B2_INPUT].getChannels()), 1); |
|
|
|
|
|
float in[16]; |
|
|
|
|
|
for (int c = 0; c < channels; c++) { |
|
|
|
|
|
in[c] = inputs[B1_INPUT].getPolyVoltage(c) + inputs[B2_INPUT].getPolyVoltage(c); |
|
|
|
|
|
outputs[B1_OUTPUT].setVoltage(in[c], c); |
|
|
|
|
|
outputs[B2_OUTPUT].setVoltage(in[c], c); |
|
|
|
|
|
} |
|
|
|
|
|
outputs[B1_OUTPUT].setChannels(channels); |
|
|
|
|
|
outputs[B2_OUTPUT].setChannels(channels); |
|
|
|
|
|
lights[B_LIGHT + 0].setSmoothBrightness(in[0] / 5.f, args.sampleTime); |
|
|
|
|
|
lights[B_LIGHT + 1].setSmoothBrightness(-in[0] / 5.f, args.sampleTime); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
lights[A_POS_LIGHT].setSmoothBrightness(fmaxf(0.0, inA / 5.0), args.sampleTime); |
|
|
|
|
|
lights[A_NEG_LIGHT].setSmoothBrightness(fmaxf(0.0, -inA / 5.0), args.sampleTime); |
|
|
|
|
|
lights[B_POS_LIGHT].setSmoothBrightness(fmaxf(0.0, inB / 5.0), args.sampleTime); |
|
|
|
|
|
lights[B_NEG_LIGHT].setSmoothBrightness(fmaxf(0.0, -inB / 5.0), args.sampleTime); |
|
|
|
|
|
lights[C_POS_LIGHT].setSmoothBrightness(fmaxf(0.0, inC / 5.0), args.sampleTime); |
|
|
|
|
|
lights[C_NEG_LIGHT].setSmoothBrightness(fmaxf(0.0, -inC / 5.0), args.sampleTime); |
|
|
|
|
|
|
|
|
// Section C |
|
|
|
|
|
{ |
|
|
|
|
|
int channels = std::max(std::max(std::max(inputs[C1_INPUT].getChannels(), inputs[C2_INPUT].getChannels()), inputs[C3_INPUT].getChannels()), 1); |
|
|
|
|
|
float in[16]; |
|
|
|
|
|
for (int c = 0; c < channels; c++) { |
|
|
|
|
|
in[c] = inputs[C1_INPUT].getPolyVoltage(c) + inputs[C2_INPUT].getPolyVoltage(c) + inputs[C3_INPUT].getPolyVoltage(c); |
|
|
|
|
|
outputs[C1_OUTPUT].setVoltage(in[c], c); |
|
|
|
|
|
} |
|
|
|
|
|
outputs[C1_OUTPUT].setChannels(channels); |
|
|
|
|
|
lights[C_LIGHT + 0].setSmoothBrightness(in[0] / 5.f, args.sampleTime); |
|
|
|
|
|
lights[C_LIGHT + 1].setSmoothBrightness(-in[0] / 5.f, args.sampleTime); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
@@ -79,9 +106,9 @@ struct LinksWidget : ModuleWidget { |
|
|
addInput(createInput<PJ301MPort>(Vec(4, 316), module, Links::C3_INPUT)); |
|
|
addInput(createInput<PJ301MPort>(Vec(4, 316), module, Links::C3_INPUT)); |
|
|
addOutput(createOutput<PJ301MPort>(Vec(31, 316), module, Links::C1_OUTPUT)); |
|
|
addOutput(createOutput<PJ301MPort>(Vec(31, 316), module, Links::C1_OUTPUT)); |
|
|
|
|
|
|
|
|
addChild(createLight<SmallLight<GreenRedLight>>(Vec(26, 59), module, Links::A_POS_LIGHT)); |
|
|
|
|
|
addChild(createLight<SmallLight<GreenRedLight>>(Vec(26, 161), module, Links::B_POS_LIGHT)); |
|
|
|
|
|
addChild(createLight<SmallLight<GreenRedLight>>(Vec(26, 262), module, Links::C_POS_LIGHT)); |
|
|
|
|
|
|
|
|
addChild(createLight<SmallLight<GreenRedLight>>(Vec(26, 59), module, Links::A_LIGHT)); |
|
|
|
|
|
addChild(createLight<SmallLight<GreenRedLight>>(Vec(26, 161), module, Links::B_LIGHT)); |
|
|
|
|
|
addChild(createLight<SmallLight<GreenRedLight>>(Vec(26, 262), module, Links::C_LIGHT)); |
|
|
} |
|
|
} |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|