Browse Source

Make Mutes polyphonic

tags/v1.0.1
Andrew Belt 6 years ago
parent
commit
437988cc04
1 changed files with 39 additions and 25 deletions
  1. +39
    -25
      src/Mutes.cpp

+ 39
- 25
src/Mutes.cpp View File

@@ -1,33 +1,30 @@
#include "plugin.hpp"


#define NUM_CHANNELS 10


struct Mutes : Module {
enum ParamIds {
MUTE_PARAM,
NUM_PARAMS = MUTE_PARAM + NUM_CHANNELS
ENUMS(MUTE_PARAM, 10),
NUM_PARAMS
};
enum InputIds {
IN_INPUT,
NUM_INPUTS = IN_INPUT + NUM_CHANNELS
ENUMS(IN_INPUT, 10),
NUM_INPUTS
};
enum OutputIds {
OUT_OUTPUT,
NUM_OUTPUTS = OUT_OUTPUT + NUM_CHANNELS
ENUMS(OUT_OUTPUT, 10),
NUM_OUTPUTS
};
enum LightIds {
MUTE_LIGHT,
NUM_LIGHTS = MUTE_LIGHT + NUM_CHANNELS
ENUMS(MUTE_LIGHT, 10),
NUM_LIGHTS
};

bool state[NUM_CHANNELS];
dsp::SchmittTrigger muteTrigger[NUM_CHANNELS];
bool state[10];
dsp::BooleanTrigger muteTrigger[10];

Mutes() {
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);
for (int i = 0; i < NUM_CHANNELS; i++) {
for (int i = 0; i < 10; i++) {
params[MUTE_PARAM + i].config(0.0, 1.0, 0.0, string::f("Ch %d mute", i+1));
}

@@ -35,24 +32,41 @@ struct Mutes : Module {
}

void process(const ProcessArgs &args) override {
float out = 0.f;
for (int i = 0; i < NUM_CHANNELS; i++) {
if (muteTrigger[i].process(params[MUTE_PARAM + i].getValue()))
float out[16] = {};
int channels = 1;
for (int i = 0; i < 10; i++) {
// Process trigger
if (muteTrigger[i].process(params[MUTE_PARAM + i].getValue() > 0.f))
state[i] ^= true;
if (inputs[IN_INPUT + i].active)
out = inputs[IN_INPUT + i].getVoltage();
outputs[OUT_OUTPUT + i].setVoltage(state[i] ? out : 0.f);
lights[MUTE_LIGHT + i].setBrightness(state[i] ? 0.9f : 0.f);

// Get input
// Inputs are normalized to the input above it, so only set if connected
if (inputs[IN_INPUT + i].active) {
inputs[IN_INPUT + i].getVoltages(out);
channels = inputs[IN_INPUT + i].getChannels();
}

// Set output and light
outputs[OUT_OUTPUT + i].setChannels(channels);
if (state[i]) {
outputs[OUT_OUTPUT + i].setVoltages(out);
lights[MUTE_LIGHT + i].setBrightness(0.9f);
}
else {
for (int c = 0; c < channels; c++)
outputs[OUT_OUTPUT + i].setVoltage(0.f);
lights[MUTE_LIGHT + i].setBrightness(0.f);
}
}
}

void onReset() override {
for (int i = 0; i < NUM_CHANNELS; i++) {
for (int i = 0; i < 10; i++) {
state[i] = true;
}
}
void onRandomize() override {
for (int i = 0; i < NUM_CHANNELS; i++) {
for (int i = 0; i < 10; i++) {
state[i] = (random::uniform() < 0.5f);
}
}
@@ -61,7 +75,7 @@ struct Mutes : Module {
json_t *rootJ = json_object();
// states
json_t *statesJ = json_array();
for (int i = 0; i < NUM_CHANNELS; i++) {
for (int i = 0; i < 10; i++) {
json_t *stateJ = json_boolean(state[i]);
json_array_append_new(statesJ, stateJ);
}
@@ -73,7 +87,7 @@ struct Mutes : Module {
// states
json_t *statesJ = json_object_get(rootJ, "states");
if (statesJ) {
for (int i = 0; i < NUM_CHANNELS; i++) {
for (int i = 0; i < 10; i++) {
json_t *stateJ = json_array_get(statesJ, i);
if (stateJ)
state[i] = json_boolean_value(stateJ);


Loading…
Cancel
Save