I want to create a version of Kinks that has 3 sample and hold sections because I miss Shhhh from Southpole (I know it is apparently coming but this seemed like a nice little project to start modifying/creating plugins).
I have edited the svg and AudibleInstruments/src/Kinks.cpp so that it looks to be right according to the original but I have no ports on the two new sections. What did I do wrong?
This is what I have at the moment:
#include "AudibleInstruments.hpp"
struct Kinks : Module {
enum ParamIds {
NUM_PARAMS
};
enum InputIds {
SH_A_INPUT,
TRIG_A_INPUT,
SH_B_INPUT,
TRIG_B_INPUT,
SH_C_INPUT,
TRIG_C_INPUT,
NUM_INPUTS
};
enum OutputIds {
NOISE_A_OUTPUT,
SH_A_OUTPUT,
NOISE_B_OUTPUT,
SH_B_OUTPUT,
NOISE_C_OUTPUT,
SH_C_OUTPUT,
NUM_OUTPUTS
};
enum LightIds {
SH_A_POS_LIGHT, SH_A_NEG_LIGHT,
SH_B_POS_LIGHT, SH_B_NEG_LIGHT,
SH_C_POS_LIGHT, SH_C_NEG_LIGHT,
NUM_LIGHTS
};
dsp::SchmittTrigger trigger;
float sample = 0.0;
Kinks() {
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);
}
void process(const ProcessArgs &args) override {
// Gaussian noise generator
float noise = 2.0 * random::normal();
// S&H
if (trigger.process(inputs[TRIG_A_INPUT].getVoltage() / 0.7)) {
sample = inputs[SH_A_INPUT].getNormalVoltage(noise);
}
if (trigger.process(inputs[TRIG_B_INPUT].getVoltage() / 0.7)) {
sample = inputs[SH_B_INPUT].getNormalVoltage(noise);
}
if (trigger.process(inputs[TRIG_C_INPUT].getVoltage() / 0.7)) {
sample = inputs[SH_C_INPUT].getNormalVoltage(noise);
}
// lights
lights[SH_A_POS_LIGHT].setBrightness(fmaxf(0.0, sample / 5.0));
lights[SH_A_NEG_LIGHT].setBrightness(fmaxf(0.0, -sample / 5.0));
lights[SH_B_POS_LIGHT].setBrightness(fmaxf(0.0, sample / 5.0));
lights[SH_B_NEG_LIGHT].setBrightness(fmaxf(0.0, -sample / 5.0));
lights[SH_C_POS_LIGHT].setBrightness(fmaxf(0.0, sample / 5.0));
lights[SH_C_NEG_LIGHT].setBrightness(fmaxf(0.0, -sample / 5.0));
// outputs
outputs[NOISE_A_OUTPUT].setVoltage(noise);
outputs[SH_A_OUTPUT].setVoltage(sample);
outputs[NOISE_B_OUTPUT].setVoltage(noise);
outputs[SH_B_OUTPUT].setVoltage(sample);
outputs[NOISE_C_OUTPUT].setVoltage(noise);
outputs[SH_C_OUTPUT].setVoltage(sample);
}
};
struct KinksWidget : ModuleWidget {
KinksWidget(Kinks *module) {
setModule(module);
setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/Kinks.svg")));
addChild(createWidget<ScrewSilver>(Vec(15, 0)));
addChild(createWidget<ScrewSilver>(Vec(15, 365)));
addInput(createInput<PJ301MPort>(Vec(4, 278), module, Kinks::SH_A_INPUT));
addInput(createInput<PJ301MPort>(Vec(31, 278), module, Kinks::TRIG_A_INPUT));
addOutput(createOutput<PJ301MPort>(Vec(4, 316), module, Kinks::NOISE_A_OUTPUT));
addOutput(createOutput<PJ301MPort>(Vec(31, 316), module, Kinks::SH_A_OUTPUT));
addInput(createInput<PJ301MPort>(Vec(4, 278), module, Kinks::SH_B_INPUT));
addInput(createInput<PJ301MPort>(Vec(31, 278), module, Kinks::TRIG_B_INPUT));
addOutput(createOutput<PJ301MPort>(Vec(4, 316), module, Kinks::NOISE_B_OUTPUT));
addOutput(createOutput<PJ301MPort>(Vec(31, 316), module, Kinks::SH_B_OUTPUT));
addInput(createInput<PJ301MPort>(Vec(4, 278), module, Kinks::SH_C_INPUT));
addInput(createInput<PJ301MPort>(Vec(31, 278), module, Kinks::TRIG_C_INPUT));
addOutput(createOutput<PJ301MPort>(Vec(4, 316), module, Kinks::NOISE_C_OUTPUT));
addOutput(createOutput<PJ301MPort>(Vec(31, 316), module, Kinks::SH_C_OUTPUT));
addChild(createLight<SmallLight<GreenRedLight>>(Vec(11, 59), module, Kinks::SH_A_POS_LIGHT));
addChild(createLight<SmallLight<GreenRedLight>>(Vec(11, 161), module, Kinks::SH_B_POS_LIGHT));
addChild(createLight<SmallLight<GreenRedLight>>(Vec(11, 262), module, Kinks::SH_C_POS_LIGHT));
}
};
Model *modelKinks = createModel<Kinks, KinksWidget>("Kinks");
I guess I have to put this as well according to the license: Copyright 2016 Andrew Belt
I don’t know any of whatever code this in but I’ve played with bash, lua, python before and this seems remarkably simple to follow (or so I thought?).