|
@@ -15,25 +15,38 @@ struct _8vert : Module { |
|
|
NUM_OUTPUTS |
|
|
NUM_OUTPUTS |
|
|
}; |
|
|
}; |
|
|
enum LightIds { |
|
|
enum LightIds { |
|
|
ENUMS(OUT_LIGHTS, 8*2), |
|
|
|
|
|
NUM_LIGHTS |
|
|
NUM_LIGHTS |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
_8vert() { |
|
|
_8vert() { |
|
|
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); |
|
|
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); |
|
|
for (int i = 0; i < 8; i++) { |
|
|
for (int i = 0; i < 8; i++) { |
|
|
params[GAIN_PARAMS + i].config(-1.f, 1.f, 0.f, string::f("Ch %d gain", i+1)); |
|
|
|
|
|
|
|
|
params[GAIN_PARAMS + i].config(-1.f, 1.f, 0.f, string::f("Ch %d gain", i + 1), "%", 0, 100); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void process(const ProcessArgs &args) override { |
|
|
void process(const ProcessArgs &args) override { |
|
|
float lastIn = 10.f; |
|
|
|
|
|
|
|
|
float in[16] = {10.f}; |
|
|
|
|
|
int channels = 1; |
|
|
|
|
|
|
|
|
for (int i = 0; i < 8; i++) { |
|
|
for (int i = 0; i < 8; i++) { |
|
|
lastIn = inputs[i].getNormalVoltage(lastIn); |
|
|
|
|
|
float out = lastIn * params[i].getValue(); |
|
|
|
|
|
outputs[i].setVoltage(out); |
|
|
|
|
|
lights[2*i + 0].setSmoothBrightness(out / 5.f, args.sampleTime); |
|
|
|
|
|
lights[2*i + 1].setSmoothBrightness(-out / 5.f, args.sampleTime); |
|
|
|
|
|
|
|
|
// Get input |
|
|
|
|
|
if (inputs[IN_INPUTS + i].isConnected()) { |
|
|
|
|
|
channels = inputs[IN_INPUTS + i].getChannels(); |
|
|
|
|
|
inputs[IN_INPUTS + i].getVoltages(in); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (outputs[OUT_OUTPUTS + i].isConnected()) { |
|
|
|
|
|
// Apply gain |
|
|
|
|
|
float out[16]; |
|
|
|
|
|
float gain = params[GAIN_PARAMS + i].getValue(); |
|
|
|
|
|
for (int c = 0; c < channels; c++) |
|
|
|
|
|
out[c] = gain * in[c]; |
|
|
|
|
|
|
|
|
|
|
|
// Set output |
|
|
|
|
|
outputs[OUT_OUTPUTS + i].setChannels(channels); |
|
|
|
|
|
outputs[OUT_OUTPUTS + i].setVoltages(out); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
}; |
|
|
}; |
|
@@ -75,15 +88,6 @@ struct _8vertWidget : ModuleWidget { |
|
|
addOutput(createOutput<PJ301MPort>(Vec(86.393, 242.614), module, _8vert::OUT_OUTPUTS + 5)); |
|
|
addOutput(createOutput<PJ301MPort>(Vec(86.393, 242.614), module, _8vert::OUT_OUTPUTS + 5)); |
|
|
addOutput(createOutput<PJ301MPort>(Vec(86.393, 281.059), module, _8vert::OUT_OUTPUTS + 6)); |
|
|
addOutput(createOutput<PJ301MPort>(Vec(86.393, 281.059), module, _8vert::OUT_OUTPUTS + 6)); |
|
|
addOutput(createOutput<PJ301MPort>(Vec(86.393, 319.504), module, _8vert::OUT_OUTPUTS + 7)); |
|
|
addOutput(createOutput<PJ301MPort>(Vec(86.393, 319.504), module, _8vert::OUT_OUTPUTS + 7)); |
|
|
|
|
|
|
|
|
addChild(createLight<TinyLight<GreenRedLight>>(Vec(107.702, 50.414), module, _8vert::OUT_LIGHTS + 0*2)); |
|
|
|
|
|
addChild(createLight<TinyLight<GreenRedLight>>(Vec(107.702, 88.859), module, _8vert::OUT_LIGHTS + 1*2)); |
|
|
|
|
|
addChild(createLight<TinyLight<GreenRedLight>>(Vec(107.702, 127.304), module, _8vert::OUT_LIGHTS + 2*2)); |
|
|
|
|
|
addChild(createLight<TinyLight<GreenRedLight>>(Vec(107.702, 165.745), module, _8vert::OUT_LIGHTS + 3*2)); |
|
|
|
|
|
addChild(createLight<TinyLight<GreenRedLight>>(Vec(107.702, 204.19), module, _8vert::OUT_LIGHTS + 4*2)); |
|
|
|
|
|
addChild(createLight<TinyLight<GreenRedLight>>(Vec(107.702, 242.635), module, _8vert::OUT_LIGHTS + 5*2)); |
|
|
|
|
|
addChild(createLight<TinyLight<GreenRedLight>>(Vec(107.702, 281.076), module, _8vert::OUT_LIGHTS + 6*2)); |
|
|
|
|
|
addChild(createLight<TinyLight<GreenRedLight>>(Vec(107.702, 319.521), module, _8vert::OUT_LIGHTS + 7*2)); |
|
|
|
|
|
} |
|
|
} |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|