Browse Source

Make Links polyphonic.

tags/v1.4.0
Andrew Belt 5 years ago
parent
commit
07af6520f5
3 changed files with 54 additions and 22 deletions
  1. +4
    -0
      CHANGELOG.md
  2. +2
    -1
      plugin.json
  3. +48
    -21
      src/Links.cpp

+ 4
- 0
CHANGELOG.md View File

@@ -1,3 +1,7 @@
### 1.2.1 (2020-04-23)
- Multiples
- Make polyphonic.

### 1.2.0 (2020-04-20)
- Add Liquid Filter



+ 2
- 1
plugin.json View File

@@ -118,7 +118,8 @@
"tags": [
"Multiple",
"Mixer",
"Hardware clone"
"Hardware clone",
"Polyphonic"
]
},
{


+ 48
- 21
src/Links.cpp View File

@@ -24,9 +24,9 @@ struct Links : Module {
NUM_OUTPUTS
};
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
};

@@ -35,23 +35,50 @@ struct Links : Module {
}

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));
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));
}
};



Loading…
Cancel
Save