@@ -45,14 +45,13 @@ struct Blinds : Module { | |||
Blinds() { | |||
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
configParam(GAIN1_PARAM, -1.0, 1.0, 0.0, "Polarity and gain 1"); | |||
configParam(GAIN2_PARAM, -1.0, 1.0, 0.0, "Polarity and gain 2"); | |||
configParam(GAIN3_PARAM, -1.0, 1.0, 0.0, "Polarity and gain 3"); | |||
configParam(GAIN4_PARAM, -1.0, 1.0, 0.0, "Polarity and gain 4"); | |||
configParam(MOD1_PARAM, -1.0, 1.0, 0.0, "Modulation 1"); | |||
configParam(MOD2_PARAM, -1.0, 1.0, 0.0, "Modulation 2"); | |||
configParam(MOD3_PARAM, -1.0, 1.0, 0.0, "Modulation 3"); | |||
configParam(MOD4_PARAM, -1.0, 1.0, 0.0, "Modulation 4"); | |||
for (int c = 0; c < 4; c++) { | |||
configParam(GAIN1_PARAM + c, -1.0, 1.0, 0.0, string::f("Channel %d gain", c + 1), "%", 0, 100); | |||
configParam(MOD1_PARAM + c, -1.0, 1.0, 0.0, string::f("Channel %d CV amount", c + 1)); | |||
configInput(IN1_INPUT + c, string::f("Channel %d", c + 1)); | |||
configInput(CV1_INPUT + c, string::f("Channel %d CV", c + 1)); | |||
configOutput(OUT1_OUTPUT + c, string::f("Channel %d", c + 1)); | |||
} | |||
} | |||
void process(const ProcessArgs& args) override { | |||
@@ -47,6 +47,12 @@ struct Braids : Module { | |||
configParam(TIMBRE_PARAM, 0.0, 1.0, 0.5, "Timbre", "%", 0.f, 100.f); | |||
configParam(MODULATION_PARAM, -1.0, 1.0, 0.0, "Modulation"); | |||
configParam(COLOR_PARAM, 0.0, 1.0, 0.5, "Color", "%", 0.f, 100.f); | |||
configInput(TRIG_INPUT, "Trigger"); | |||
configInput(PITCH_INPUT, "Pitch (1V/oct)"); | |||
configInput(FM_INPUT, "FM"); | |||
configInput(TIMBRE_INPUT, "Timbre"); | |||
configInput(COLOR_INPUT, "Color"); | |||
configOutput(OUT_OUTPUT, "Audio"); | |||
memset(&osc, 0, sizeof(osc)); | |||
osc.Init(); | |||
@@ -35,10 +35,14 @@ struct Branches : Module { | |||
Branches() { | |||
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
configParam(THRESHOLD1_PARAM, 0.0, 1.0, 0.5, "Channel 1 probability", "%", 0, 100); | |||
configParam(MODE1_PARAM, 0.0, 1.0, 0.0, "Channel 1 mode"); | |||
configParam(THRESHOLD2_PARAM, 0.0, 1.0, 0.5, "Channel 2 probability", "%", 0, 100); | |||
configParam(MODE2_PARAM, 0.0, 1.0, 0.0, "Channel 2 mode"); | |||
for (int c = 0; c < 2; c++) { | |||
configParam(THRESHOLD1_PARAM + c, 0.0, 1.0, 0.5, string::f("Channel %d probability", c + 1), "%", 0, 100); | |||
configParam(MODE1_PARAM + c, 0.0, 1.0, 0.0, string::f("Channel %d mode", c + 1)); | |||
configInput(IN1_INPUT + c, string::f("Channel %d", c + 1)); | |||
configInput(P1_INPUT + c, string::f("Channel %d probability", c + 1)); | |||
configOutput(OUT1A_OUTPUT + c, string::f("Channel %d A", c + 1)); | |||
configOutput(OUT1B_OUTPUT + c, string::f("Channel %d B", c + 1)); | |||
} | |||
} | |||
void process(const ProcessArgs& args) override { | |||
@@ -77,9 +77,21 @@ struct Clouds : Module { | |||
configParam(SPREAD_PARAM, 0.0, 1.0, 0.0, "Stereo spread"); | |||
configParam(FEEDBACK_PARAM, 0.0, 1.0, 0.0, "Feedback amount"); | |||
configParam(REVERB_PARAM, 0.0, 1.0, 0.0, "Reverb amount"); | |||
configParam(FREEZE_PARAM, 0.0, 1.0, 0.0, "Freeze"); | |||
configParam(MODE_PARAM, 0.0, 1.0, 0.0, "Mode"); | |||
configParam(LOAD_PARAM, 0.0, 1.0, 0.0, "Load/save"); | |||
configButton(FREEZE_PARAM, "Freeze"); | |||
configButton(MODE_PARAM, "Mode"); | |||
configButton(LOAD_PARAM, "Load/save"); | |||
configInput(FREEZE_INPUT, "Freeze"); | |||
configInput(TRIG_INPUT, "Trigger"); | |||
configInput(POSITION_INPUT, "Position"); | |||
configInput(SIZE_INPUT, "Size"); | |||
configInput(PITCH_INPUT, "Pitch (1V/oct)"); | |||
configInput(BLEND_INPUT, "Blend"); | |||
configInput(IN_L_INPUT, "Left"); | |||
configInput(IN_R_INPUT, "Right"); | |||
configInput(DENSITY_INPUT, "Density"); | |||
configInput(TEXTURE_INPUT, "Texture"); | |||
configOutput(OUT_L_OUTPUT, "Left"); | |||
configOutput(OUT_R_OUTPUT, "Right"); | |||
const int memLen = 118784; | |||
const int ccmLen = 65536 - 128; | |||
@@ -97,17 +97,37 @@ struct Elements : Module { | |||
configParam(DAMPING_PARAM, 0.0, 1.0, 0.5, "Energy dissipation speed"); | |||
configParam(POSITION_PARAM, 0.0, 1.0, 0.5, "Excitation position"); | |||
configParam(SPACE_PARAM, 0.0, 2.0, 0.0, "Reverb space"); | |||
configParam(BOW_TIMBRE_MOD_PARAM, -1.0, 1.0, 0.0, "Bow timbre attenuverter"); | |||
configParam(FLOW_MOD_PARAM, -1.0, 1.0, 0.0, "Air flow noise attenuverter"); | |||
configParam(BLOW_TIMBRE_MOD_PARAM, -1.0, 1.0, 0.0, "Blow timbre attenuverter"); | |||
configParam(MALLET_MOD_PARAM, -1.0, 1.0, 0.0, "Percussive noise attenuverter"); | |||
configParam(STRIKE_TIMBRE_MOD_PARAM, -1.0, 1.0, 0.0, "Strike timbre attenuverter"); | |||
configParam(DAMPING_MOD_PARAM, -1.0, 1.0, 0.0, "Energy dissipation speed attenuverter"); | |||
configParam(GEOMETRY_MOD_PARAM, -1.0, 1.0, 0.0, "Resonator geometry attenuverter"); | |||
configParam(POSITION_MOD_PARAM, -1.0, 1.0, 0.0, "Excitation position attenuverter"); | |||
configParam(BRIGHTNESS_MOD_PARAM, -1.0, 1.0, 0.0, "Brightness attenuverter"); | |||
configParam(SPACE_MOD_PARAM, -2.0, 2.0, 0.0, "Reverb space attenuverter"); | |||
configParam(PLAY_PARAM, 0.0, 1.0, 0.0, "Play"); | |||
configParam(BOW_TIMBRE_MOD_PARAM, -1.0, 1.0, 0.0, "Bow timbre CV"); | |||
configParam(FLOW_MOD_PARAM, -1.0, 1.0, 0.0, "Air flow noise CV"); | |||
configParam(BLOW_TIMBRE_MOD_PARAM, -1.0, 1.0, 0.0, "Blow timbre CV"); | |||
configParam(MALLET_MOD_PARAM, -1.0, 1.0, 0.0, "Percussive noise CV"); | |||
configParam(STRIKE_TIMBRE_MOD_PARAM, -1.0, 1.0, 0.0, "Strike timbre CV"); | |||
configParam(DAMPING_MOD_PARAM, -1.0, 1.0, 0.0, "Energy dissipation speed CV"); | |||
configParam(GEOMETRY_MOD_PARAM, -1.0, 1.0, 0.0, "Resonator geometry CV"); | |||
configParam(POSITION_MOD_PARAM, -1.0, 1.0, 0.0, "Excitation position CV"); | |||
configParam(BRIGHTNESS_MOD_PARAM, -1.0, 1.0, 0.0, "Brightness CV"); | |||
configParam(SPACE_MOD_PARAM, -2.0, 2.0, 0.0, "Reverb space CV"); | |||
configButton(PLAY_PARAM, "Play"); | |||
configInput(NOTE_INPUT, "Pitch (1V/oct)"); | |||
configInput(FM_INPUT, "FM"); | |||
configInput(GATE_INPUT, "Gate"); | |||
configInput(STRENGTH_INPUT, "Strength"); | |||
configInput(BLOW_INPUT, "External blow"); | |||
configInput(STRIKE_INPUT, "External strike"); | |||
configInput(BOW_TIMBRE_MOD_INPUT, "Bow timbre"); | |||
configInput(FLOW_MOD_INPUT, "Air flow noise"); | |||
configInput(BLOW_TIMBRE_MOD_INPUT, "Blow timbre"); | |||
configInput(MALLET_MOD_INPUT, "Percussive noise"); | |||
configInput(STRIKE_TIMBRE_MOD_INPUT, "Strike timbre"); | |||
configInput(DAMPING_MOD_INPUT, "Energy dissipation speed"); | |||
configInput(GEOMETRY_MOD_INPUT, "Resonator geometry"); | |||
configInput(POSITION_MOD_INPUT, "Excitation position"); | |||
configInput(BRIGHTNESS_MOD_INPUT, "Brightness"); | |||
configInput(SPACE_MOD_INPUT, "Reverb space"); | |||
configOutput(AUX_OUTPUT, "Left"); | |||
configOutput(MAIN_OUTPUT, "Right"); | |||
for (int c = 0; c < 16; c++) { | |||
parts[c] = new elements::Part(); | |||
@@ -51,15 +51,29 @@ struct Frames : Module { | |||
Frames() { | |||
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
configParam(GAIN1_PARAM, 0.0, 1.0, 0.0, "Gain 1"); | |||
configParam(GAIN2_PARAM, 0.0, 1.0, 0.0, "Gain 2"); | |||
configParam(GAIN3_PARAM, 0.0, 1.0, 0.0, "Gain 3"); | |||
configParam(GAIN4_PARAM, 0.0, 1.0, 0.0, "Gain 4"); | |||
configParam(GAIN1_PARAM, 0.0, 1.0, 0.0, "Channel 1 gain"); | |||
configParam(GAIN2_PARAM, 0.0, 1.0, 0.0, "Channel 2 gain"); | |||
configParam(GAIN3_PARAM, 0.0, 1.0, 0.0, "Channel 3 gain"); | |||
configParam(GAIN4_PARAM, 0.0, 1.0, 0.0, "Channel 4 gain"); | |||
configParam(FRAME_PARAM, 0.0, 1.0, 0.0, "Frame"); | |||
configParam(MODULATION_PARAM, -1.0, 1.0, 0.0, "Animation attenuverter"); | |||
configParam(ADD_PARAM, 0.0, 1.0, 0.0, "Add keyframe"); | |||
configParam(DEL_PARAM, 0.0, 1.0, 0.0, "Delete keyframe"); | |||
configParam(OFFSET_PARAM, 0.0, 1.0, 0.0, "+10V offset"); | |||
configButton(ADD_PARAM, "Add keyframe"); | |||
configButton(DEL_PARAM, "Delete keyframe"); | |||
configSwitch(OFFSET_PARAM, 0.0, 1.0, 0.0, "Offset", {"+0V", "+10V"}); | |||
configInput(ALL_INPUT, "All"); | |||
configInput(IN1_INPUT, "Channel 1"); | |||
configInput(IN2_INPUT, "Channel 2"); | |||
configInput(IN3_INPUT, "Channel 3"); | |||
configInput(IN4_INPUT, "Channel 4"); | |||
configInput(FRAME_INPUT, "Frame"); | |||
configOutput(MIX_OUTPUT, "Mix"); | |||
configOutput(OUT1_OUTPUT, "Channel 1"); | |||
configOutput(OUT2_OUTPUT, "Channel 2"); | |||
configOutput(OUT3_OUTPUT, "Channel 3"); | |||
configOutput(OUT4_OUTPUT, "Channel 4"); | |||
configOutput(FRAME_STEP_OUTPUT, "Frame step"); | |||
memset(&keyframer, 0, sizeof(keyframer)); | |||
keyframer.Init(); | |||
@@ -35,6 +35,20 @@ struct Kinks : Module { | |||
Kinks() { | |||
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
configInput(SIGN_INPUT, "Sign"); | |||
configInput(LOGIC_A_INPUT, "Logic A"); | |||
configInput(LOGIC_B_INPUT, "Logic B"); | |||
configInput(SH_INPUT, "Sample & hold"); | |||
configInput(TRIG_INPUT, "S&H trigger"); | |||
configOutput(INVERT_OUTPUT, "Invert"); | |||
configOutput(HALF_RECTIFY_OUTPUT, "Half rectified"); | |||
configOutput(FULL_RECTIFY_OUTPUT, "Full rectified"); | |||
configOutput(MAX_OUTPUT, "Maximum"); | |||
configOutput(MIN_OUTPUT, "Minimum"); | |||
configOutput(NOISE_OUTPUT, "Noise"); | |||
configOutput(SH_OUTPUT, "Sample & hold"); | |||
} | |||
void process(const ProcessArgs& args) override { | |||
@@ -32,6 +32,18 @@ struct Links : Module { | |||
Links() { | |||
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
configInput(A1_INPUT, "A1"); | |||
configInput(B1_INPUT, "B1"); | |||
configInput(B2_INPUT, "B2"); | |||
configInput(C1_INPUT, "C1"); | |||
configInput(C2_INPUT, "C2"); | |||
configInput(C3_INPUT, "C3"); | |||
configOutput(A1_OUTPUT, "A1"); | |||
configOutput(A2_OUTPUT, "A2"); | |||
configOutput(A3_OUTPUT, "A3"); | |||
configOutput(B1_OUTPUT, "B1"); | |||
configOutput(B2_OUTPUT, "B2"); | |||
configOutput(C1_OUTPUT, "C1"); | |||
} | |||
void process(const ProcessArgs& args) override { | |||
@@ -225,22 +225,40 @@ struct Marbles : Module { | |||
Marbles() { | |||
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
configParam(T_DEJA_VU_PARAM, 0.0, 1.0, 0.0, "t deja vu"); | |||
configParam(X_DEJA_VU_PARAM, 0.0, 1.0, 0.0, "X deja vu"); | |||
configButton(T_DEJA_VU_PARAM, "T deja vu"); | |||
configButton(X_DEJA_VU_PARAM, "X deja vu"); | |||
configParam(DEJA_VU_PARAM, 0.0, 1.0, 0.5, "Deja vu probability"); | |||
configParam(T_RATE_PARAM, -1.0, 1.0, 0.0, "Clock rate"); | |||
configParam(X_SPREAD_PARAM, 0.0, 1.0, 0.5, "Probability distribution"); | |||
configParam(T_MODE_PARAM, 0.0, 1.0, 0.0, "t mode"); | |||
configParam(X_MODE_PARAM, 0.0, 1.0, 0.0, "X mode"); | |||
configButton(T_MODE_PARAM, "T mode"); | |||
configButton(X_MODE_PARAM, "X mode"); | |||
configParam(DEJA_VU_LENGTH_PARAM, 0.0, 1.0, 0.0, "Loop length"); | |||
configParam(T_BIAS_PARAM, 0.0, 1.0, 0.5, "Gate bias"); | |||
configParam(X_BIAS_PARAM, 0.0, 1.0, 0.5, "Distribution bias"); | |||
configParam(T_RANGE_PARAM, 0.0, 1.0, 0.0, "Clock range mode"); | |||
configParam(X_RANGE_PARAM, 0.0, 1.0, 0.0, "Output voltage range mode"); | |||
configParam(EXTERNAL_PARAM, 0.0, 1.0, 0.0, "External processing mode"); | |||
configButton(T_RANGE_PARAM, "Clock range mode"); | |||
configButton(X_RANGE_PARAM, "Output voltage range mode"); | |||
configButton(EXTERNAL_PARAM, "External processing mode"); | |||
configParam(T_JITTER_PARAM, 0.0, 1.0, 0.0, "Randomness amount"); | |||
configParam(X_STEPS_PARAM, 0.0, 1.0, 0.5, "Smoothness"); | |||
configInput(T_BIAS_INPUT, "T bias"); | |||
configInput(X_BIAS_INPUT, "X bias"); | |||
configInput(T_CLOCK_INPUT, "T clock"); | |||
configInput(T_RATE_INPUT, "T rate"); | |||
configInput(T_JITTER_INPUT, "T jitter"); | |||
configInput(DEJA_VU_INPUT, "Deja vu"); | |||
configInput(X_STEPS_INPUT, "X steps"); | |||
configInput(X_SPREAD_INPUT, "X spread"); | |||
configInput(X_CLOCK_INPUT, "X clock"); | |||
configOutput(T1_OUTPUT, "T₁"); | |||
configOutput(T2_OUTPUT, "T₂"); | |||
configOutput(T3_OUTPUT, "T₃"); | |||
configOutput(Y_OUTPUT, "Y"); | |||
configOutput(X1_OUTPUT, "X₁"); | |||
configOutput(X2_OUTPUT, "X₂"); | |||
configOutput(X3_OUTPUT, "X₃"); | |||
random_generator.Init(1); | |||
random_stream.Init(&random_generator); | |||
note_filter.Init(); | |||
@@ -591,7 +609,7 @@ struct MarblesWidget : ModuleWidget { | |||
menu->addChild(new MenuSeparator); | |||
menu->addChild(createIndexPtrSubmenuItem("t mode", { | |||
menu->addChild(createIndexPtrSubmenuItem("T mode", { | |||
"Complementary Bernoulli", | |||
"Clusters", | |||
"Drums", | |||
@@ -601,7 +619,7 @@ struct MarblesWidget : ModuleWidget { | |||
"Markov", | |||
}, &module->t_mode)); | |||
menu->addChild(createIndexPtrSubmenuItem("t range", { | |||
menu->addChild(createIndexPtrSubmenuItem("T range", { | |||
"1/4x", | |||
"1x", | |||
"4x", | |||
@@ -58,8 +58,8 @@ struct Plaits : Module { | |||
Plaits() { | |||
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
configParam(MODEL1_PARAM, 0.0, 1.0, 0.0, "Model selection 1"); | |||
configParam(MODEL2_PARAM, 0.0, 1.0, 0.0, "Model selection 2"); | |||
configButton(MODEL1_PARAM, "Pitched models"); | |||
configButton(MODEL2_PARAM, "Noise/percussive models"); | |||
configParam(FREQ_PARAM, -4.0, 4.0, 0.0, "Frequency", " semitones", 0.f, 12.f); | |||
configParam(HARMONICS_PARAM, 0.0, 1.0, 0.5, "Harmonics", "%", 0.f, 100.f); | |||
configParam(TIMBRE_PARAM, 0.0, 1.0, 0.5, "Timbre", "%", 0.f, 100.f); | |||
@@ -70,6 +70,18 @@ struct Plaits : Module { | |||
configParam(FREQ_CV_PARAM, -1.0, 1.0, 0.0, "Frequency CV"); | |||
configParam(MORPH_CV_PARAM, -1.0, 1.0, 0.0, "Morph CV"); | |||
configInput(ENGINE_INPUT, "Model"); | |||
configInput(TIMBRE_INPUT, "Timbre"); | |||
configInput(FREQ_INPUT, "FM"); | |||
configInput(MORPH_INPUT, "Morph"); | |||
configInput(HARMONICS_INPUT, "Harmonics"); | |||
configInput(TRIGGER_INPUT, "Trigger"); | |||
configInput(LEVEL_INPUT, "Level"); | |||
configInput(NOTE_INPUT, "Pitch (1V/oct)"); | |||
configOutput(OUT_OUTPUT, "Main"); | |||
configOutput(AUX_OUTPUT, "Auxiliary"); | |||
for (int i = 0; i < 16; i++) { | |||
stmlib::BufferAllocator allocator(shared_buffer[i], sizeof(shared_buffer[i])); | |||
voice[i].Init(&allocator); | |||
@@ -65,18 +65,30 @@ struct Rings : Module { | |||
Rings() { | |||
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
configParam(POLYPHONY_PARAM, 0.0, 1.0, 0.0, "Polyphony"); | |||
configParam(RESONATOR_PARAM, 0.0, 1.0, 0.0, "Resonator type"); | |||
configParam(FREQUENCY_PARAM, 0.0, 60.0, 30.0, "Coarse frequency adjustment"); | |||
configParam(STRUCTURE_PARAM, 0.0, 1.0, 0.5, "Harmonic structure"); | |||
configButton(POLYPHONY_PARAM, "Polyphony"); | |||
configButton(RESONATOR_PARAM, "Resonator type"); | |||
configParam(FREQUENCY_PARAM, 0.0, 60.0, 30.0, "Frequency"); | |||
configParam(STRUCTURE_PARAM, 0.0, 1.0, 0.5, "Structure"); | |||
configParam(BRIGHTNESS_PARAM, 0.0, 1.0, 0.5, "Brightness"); | |||
configParam(DAMPING_PARAM, 0.0, 1.0, 0.5, "Decay time"); | |||
configParam(POSITION_PARAM, 0.0, 1.0, 0.5, "Excitation position"); | |||
configParam(BRIGHTNESS_MOD_PARAM, -1.0, 1.0, 0.0, "Brightness attenuverter"); | |||
configParam(FREQUENCY_MOD_PARAM, -1.0, 1.0, 0.0, "Frequency attenuverter"); | |||
configParam(DAMPING_MOD_PARAM, -1.0, 1.0, 0.0, "Damping attenuverter"); | |||
configParam(STRUCTURE_MOD_PARAM, -1.0, 1.0, 0.0, "Structure attenuverter"); | |||
configParam(POSITION_MOD_PARAM, -1.0, 1.0, 0.0, "Position attenuverter"); | |||
configParam(DAMPING_PARAM, 0.0, 1.0, 0.5, "Damping"); | |||
configParam(POSITION_PARAM, 0.0, 1.0, 0.5, "Position"); | |||
configParam(BRIGHTNESS_MOD_PARAM, -1.0, 1.0, 0.0, "Brightness CV"); | |||
configParam(FREQUENCY_MOD_PARAM, -1.0, 1.0, 0.0, "Frequency CV"); | |||
configParam(DAMPING_MOD_PARAM, -1.0, 1.0, 0.0, "Damping CV"); | |||
configParam(STRUCTURE_MOD_PARAM, -1.0, 1.0, 0.0, "Structure CV"); | |||
configParam(POSITION_MOD_PARAM, -1.0, 1.0, 0.0, "Position CV"); | |||
configInput(BRIGHTNESS_MOD_INPUT, "Brightness"); | |||
configInput(FREQUENCY_MOD_INPUT, "Frequency"); | |||
configInput(DAMPING_MOD_INPUT, "Damping"); | |||
configInput(STRUCTURE_MOD_INPUT, "Structure"); | |||
configInput(POSITION_MOD_INPUT, "Position"); | |||
configInput(STRUM_INPUT, "Strum"); | |||
configInput(PITCH_INPUT, "Pitch (1V/oct)"); | |||
configInput(IN_INPUT, "Audio"); | |||
configOutput(ODD_OUTPUT, "Odd"); | |||
configOutput(EVEN_OUTPUT, "Even"); | |||
strummer.Init(0.01, 44100.0 / 24); | |||
part.Init(reverb_buffer); | |||
@@ -36,6 +36,17 @@ struct Ripples : Module { | |||
configParam(FREQ_PARAM, std::log2(ripples::kFreqKnobMin), std::log2(ripples::kFreqKnobMax), std::log2(ripples::kFreqKnobMax), "Frequency", " Hz", 2.f); | |||
configParam(FM_PARAM, -1.f, 1.f, 0.f, "Frequency modulation", "%", 0, 100); | |||
configInput(RES_INPUT, "Resonance"); | |||
configInput(FREQ_INPUT, "Frequency"); | |||
configInput(FM_INPUT, "FM"); | |||
configInput(IN_INPUT, "Audio"); | |||
configInput(GAIN_INPUT, "Gain"); | |||
configOutput(BP2_OUTPUT, "Band-pass 2-pole (12 dB/oct)"); | |||
configOutput(LP2_OUTPUT, "Low-pass 2-pole (12 dB/oct)"); | |||
configOutput(LP4_OUTPUT, "Low-pass 4-pole (24 dB/oct)"); | |||
configOutput(LP4VCA_OUTPUT, "Low-pass 4-pole (24 dB/oct) VCA"); | |||
onSampleRateChange(); | |||
} | |||
@@ -32,12 +32,12 @@ struct Shades : Module { | |||
Shades() { | |||
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
configParam(GAIN1_PARAM, 0.0, 1.0, 0.5, "Gain 1"); | |||
configParam(GAIN2_PARAM, 0.0, 1.0, 0.5, "Gain 2"); | |||
configParam(GAIN3_PARAM, 0.0, 1.0, 0.5, "Gain 3"); | |||
configParam(MODE1_PARAM, 0.0, 1.0, 1.0, "Attenuverter/Attenuator mode 1"); | |||
configParam(MODE2_PARAM, 0.0, 1.0, 1.0, "Attenuverter/Attenuator mode 2"); | |||
configParam(MODE3_PARAM, 0.0, 1.0, 1.0, "Attenuverter/Attenuator mode 3"); | |||
for (int c = 0; c < 3; c++) { | |||
configParam(GAIN1_PARAM + c, 0.0, 1.0, 0.5, string::f("Channel %d gain", c + 1)); | |||
configSwitch(MODE1_PARAM + c, 0.0, 1.0, 1.0, string::f("Channel %d mode", c + 1), {"Attenuator", "Attenuverter"}); | |||
configInput(IN1_INPUT + c, string::f("Channel %d", c + 1)); | |||
configOutput(OUT1_OUTPUT + c, string::f("Channel %d", c + 1)); | |||
} | |||
} | |||
void process(const ProcessArgs& args) override { | |||
@@ -76,6 +76,28 @@ struct Shelves : Module { | |||
configParam(P1_Q_PARAM, qMin, qMax, qInit, "Parametric 1 quality", "", 2.f); | |||
configParam(P2_Q_PARAM, qMin, qMax, qInit, "Parametric 2 quality", "", 2.f); | |||
configInput(HS_FREQ_INPUT, "High-shelf frequency"); | |||
configInput(HS_GAIN_INPUT, "High-shelf gain"); | |||
configInput(P1_FREQ_INPUT, "Parametric 1 frequency"); | |||
configInput(P1_GAIN_INPUT, "Parametric 1 gain"); | |||
configInput(P1_Q_INPUT, "Parametric 1 quality"); | |||
configInput(P2_FREQ_INPUT, "Parametric 2 frequency"); | |||
configInput(P2_GAIN_INPUT, "Parametric 2 gain"); | |||
configInput(P2_Q_INPUT, "Parametric 2 quality"); | |||
configInput(LS_FREQ_INPUT, "Low-shelf frequency"); | |||
configInput(LS_GAIN_INPUT, "Low-shelf gain"); | |||
configInput(FREQ_INPUT, "All frequency"); | |||
configInput(GAIN_INPUT, "All gain"); | |||
configInput(IN_INPUT, "Audio"); | |||
configOutput(P1_HP_OUTPUT, "Parametric 1 high-pass"); | |||
configOutput(P1_BP_OUTPUT, "Parametric 1 band-pass"); | |||
configOutput(P1_LP_OUTPUT, "Parametric 1 low-pass"); | |||
configOutput(P2_HP_OUTPUT, "Parametric 2 high-pass"); | |||
configOutput(P2_BP_OUTPUT, "Parametric 2 band-pass"); | |||
configOutput(P2_LP_OUTPUT, "Parametric 2 low-pass"); | |||
configOutput(OUT_OUTPUT, "Audio"); | |||
onReset(); | |||
} | |||
@@ -155,24 +155,14 @@ struct Stages : Module { | |||
Stages() { | |||
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
configParam(SHAPE_PARAMS + 0, 0.0, 1.0, 0.5, "Shape 1"); | |||
configParam(SHAPE_PARAMS + 1, 0.0, 1.0, 0.5, "Shape 2"); | |||
configParam(SHAPE_PARAMS + 2, 0.0, 1.0, 0.5, "Shape 3"); | |||
configParam(SHAPE_PARAMS + 3, 0.0, 1.0, 0.5, "Shape 4"); | |||
configParam(SHAPE_PARAMS + 4, 0.0, 1.0, 0.5, "Shape 5"); | |||
configParam(SHAPE_PARAMS + 5, 0.0, 1.0, 0.5, "Shape 6"); | |||
configParam(TYPE_PARAMS + 0, 0.0, 1.0, 0.0, "Type 1"); | |||
configParam(TYPE_PARAMS + 1, 0.0, 1.0, 0.0, "Type 2"); | |||
configParam(TYPE_PARAMS + 2, 0.0, 1.0, 0.0, "Type 3"); | |||
configParam(TYPE_PARAMS + 3, 0.0, 1.0, 0.0, "Type 4"); | |||
configParam(TYPE_PARAMS + 4, 0.0, 1.0, 0.0, "Type 5"); | |||
configParam(TYPE_PARAMS + 5, 0.0, 1.0, 0.0, "Type 6"); | |||
configParam(LEVEL_PARAMS + 0, 0.0, 1.0, 0.5, "Level 1"); | |||
configParam(LEVEL_PARAMS + 1, 0.0, 1.0, 0.5, "Level 2"); | |||
configParam(LEVEL_PARAMS + 2, 0.0, 1.0, 0.5, "Level 3"); | |||
configParam(LEVEL_PARAMS + 3, 0.0, 1.0, 0.5, "Level 4"); | |||
configParam(LEVEL_PARAMS + 4, 0.0, 1.0, 0.5, "Level 5"); | |||
configParam(LEVEL_PARAMS + 5, 0.0, 1.0, 0.5, "Level 6"); | |||
for (int c = 0; c < NUM_CHANNELS; c++) { | |||
configParam(SHAPE_PARAMS + c, 0.0, 1.0, 0.5, string::f("Stage %d shape", c + 1), "%", 0, 100); | |||
configButton(TYPE_PARAMS + c, string::f("Stage %d type", c + 1)); | |||
configParam(LEVEL_PARAMS + c, 0.0, 1.0, 0.5, string::f("Stage %d level", c + 1), "%", 0, 100); | |||
configInput(LEVEL_INPUTS + c, string::f("Stage %d level", c + 1)); | |||
configInput(GATE_INPUTS + c, string::f("Stage %d gate", c + 1)); | |||
configOutput(ENVELOPE_OUTPUTS + c, string::f("Stage %d envelope", c + 1)); | |||
} | |||
onReset(); | |||
} | |||
@@ -114,18 +114,28 @@ struct Streams : Module { | |||
Streams() { | |||
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
configParam(CH1_SHAPE_PARAM, 0.f, 1.f, 0.5f, "Ch 1 shape"); | |||
configParam(CH1_MOD_PARAM, 0.f, 1.f, 0.5f, "Ch 1 mod"); | |||
configParam(CH1_LEVEL_MOD_PARAM, 0.f, 1.f, 0.5f, "Ch 1 level mod"); | |||
configParam(CH2_SHAPE_PARAM, 0.f, 1.f, 0.5f, "Ch 2 shape"); | |||
configParam(CH2_MOD_PARAM, 0.f, 1.f, 0.5f, "Ch 2 mod"); | |||
configParam(CH2_LEVEL_MOD_PARAM, 0.f, 1.f, 0.5f, "Ch 2 level mod"); | |||
configParam(CH1_RESPONSE_PARAM, 0.f, 1.f, 0.5f, "Ch 1 response"); | |||
configParam(CH2_RESPONSE_PARAM, 0.f, 1.f, 0.5f, "Ch 2 response"); | |||
configParam(CH1_FUNCTION_BUTTON_PARAM, 0.f, 1.f, 0.f, "Ch 1 function"); | |||
configParam(CH2_FUNCTION_BUTTON_PARAM, 0.f, 1.f, 0.f, "Ch 2 function"); | |||
configParam(METERING_BUTTON_PARAM, 0.f, 1.f, 0.f, "Meter"); | |||
configParam(CH1_SHAPE_PARAM, 0.f, 1.f, 0.5f, "Channel 1 shape", "%", 0, 100); | |||
configParam(CH1_MOD_PARAM, 0.f, 1.f, 0.5f, "Channel 1 mod", "%", 0, 100); | |||
configParam(CH1_LEVEL_MOD_PARAM, 0.f, 1.f, 0.5f, "Channel 1 level mod", "%", 0, 100); | |||
configParam(CH2_SHAPE_PARAM, 0.f, 1.f, 0.5f, "Channel 2 shape", "%", 0, 100); | |||
configParam(CH2_MOD_PARAM, 0.f, 1.f, 0.5f, "Channel 2 mod", "%", 0, 100); | |||
configParam(CH2_LEVEL_MOD_PARAM, 0.f, 1.f, 0.5f, "Channel 2 level mod", "%", 0, 100); | |||
configParam(CH1_RESPONSE_PARAM, 0.f, 1.f, 0.5f, "Channel 1 response", "%", 0, 100); | |||
configParam(CH2_RESPONSE_PARAM, 0.f, 1.f, 0.5f, "Channel 2 response", "%", 0, 100); | |||
configButton(CH1_FUNCTION_BUTTON_PARAM, "Channel 1 function"); | |||
configButton(CH2_FUNCTION_BUTTON_PARAM, "Channel 2 function"); | |||
configButton(METERING_BUTTON_PARAM, "Meter"); | |||
configInput(CH1_EXCITE_INPUT, "Channel 1 excite"); | |||
configInput(CH1_SIGNAL_INPUT, "Channel 1"); | |||
configInput(CH1_LEVEL_INPUT, "Channel 1 level"); | |||
configInput(CH2_EXCITE_INPUT, "Channel 2 excite"); | |||
configInput(CH2_SIGNAL_INPUT, "Channel 2"); | |||
configInput(CH2_LEVEL_INPUT, "Channel 2 level"); | |||
configOutput(CH1_SIGNAL_OUTPUT, "Channel 1"); | |||
configOutput(CH2_SIGNAL_OUTPUT, "Channel 2"); | |||
onReset(); | |||
} | |||
@@ -52,14 +52,29 @@ struct Tides : Module { | |||
Tides() { | |||
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
configParam(MODE_PARAM, 0.0, 1.0, 0.0, "Output mode"); | |||
configParam(RANGE_PARAM, 0.0, 1.0, 0.0, "Frequency range"); | |||
configButton(MODE_PARAM, "Output mode"); | |||
configButton(RANGE_PARAM, "Frequency range"); | |||
configParam(FREQUENCY_PARAM, -48.0, 48.0, 0.0, "Main frequency"); | |||
configParam(FM_PARAM, -12.0, 12.0, 0.0, "FM input attenuverter"); | |||
configParam(SHAPE_PARAM, -1.0, 1.0, 0.0, "Shape"); | |||
configParam(SLOPE_PARAM, -1.0, 1.0, 0.0, "Slope"); | |||
configParam(SMOOTHNESS_PARAM, -1.0, 1.0, 0.0, "Smoothness"); | |||
configInput(SHAPE_INPUT, "Shape"); | |||
configInput(SLOPE_INPUT, "Slope"); | |||
configInput(SMOOTHNESS_INPUT, "Smoothness"); | |||
configInput(TRIG_INPUT, "Trigger"); | |||
configInput(FREEZE_INPUT, "Freeze"); | |||
configInput(PITCH_INPUT, "Pitch (1V/oct)"); | |||
configInput(FM_INPUT, "FM"); | |||
configInput(LEVEL_INPUT, "Level"); | |||
configInput(CLOCK_INPUT, "Clock"); | |||
configOutput(HIGH_OUTPUT, "High tide"); | |||
configOutput(LOW_OUTPUT, "Low tide"); | |||
configOutput(UNI_OUTPUT, "Unipolar"); | |||
configOutput(BI_OUTPUT, "Bipolar"); | |||
memset(&generator, 0, sizeof(generator)); | |||
generator.Init(); | |||
generator.set_sync(false); | |||
@@ -101,19 +101,35 @@ struct Tides2 : Module { | |||
Tides2() { | |||
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
configParam(RANGE_PARAM, 0.0, 1.0, 0.0, "Frequency range"); | |||
configParam(MODE_PARAM, 0.0, 1.0, 0.0, "Output mode"); | |||
configParam(FREQUENCY_PARAM, -48, 48, 0.0, "Frequency"); | |||
configParam(SHAPE_PARAM, 0.0, 1.0, 0.5, "Shape"); | |||
configParam(RAMP_PARAM, 0.0, 1.0, 0.0, "Ramp mode"); | |||
configParam(SMOOTHNESS_PARAM, 0.0, 1.0, 0.5, "Waveshape transformation"); | |||
configParam(SLOPE_PARAM, 0.0, 1.0, 0.5, "Ascending/descending ratio"); | |||
configParam(SHIFT_PARAM, 0.0, 1.0, 0.5, "Output polarization and shifting"); | |||
configParam(SLOPE_CV_PARAM, -1.0, 1.0, 0.0, "Slope CV"); | |||
configParam(FREQUENCY_CV_PARAM, -1.0, 1.0, 0.0, "Frequency CV"); | |||
configParam(SMOOTHNESS_CV_PARAM, -1.0, 1.0, 0.0, "Smoothness CV"); | |||
configParam(SHAPE_CV_PARAM, -1.0, 1.0, 0.0, "Shape CV"); | |||
configParam(SHIFT_CV_PARAM, -1.0, 1.0, 0.0, "Shift CV"); | |||
configButton(RANGE_PARAM, "Frequency range"); | |||
configButton(MODE_PARAM, "Output mode"); | |||
configParam(FREQUENCY_PARAM, -48, 48, 0.0, "Frequency", " semitones"); | |||
configParam(SHAPE_PARAM, 0.0, 1.0, 0.5, "Shape", "%", 0, 100); | |||
configButton(RAMP_PARAM, "Ramp mode"); | |||
configParam(SMOOTHNESS_PARAM, 0.0, 1.0, 0.5, "Smoothness", "%", 0, 100); | |||
getParamQuantity(SMOOTHNESS_PARAM)->description = "Waveshape transformation"; | |||
configParam(SLOPE_PARAM, 0.0, 1.0, 0.5, "Slope", "%", 0, 100); | |||
getParamQuantity(SLOPE_PARAM)->description = "Ascending/descending ratio"; | |||
configParam(SHIFT_PARAM, 0.0, 1.0, 0.5, "Shift", "%", 0, 100); | |||
getParamQuantity(SHIFT_PARAM)->description = "Output polarization and shifting"; | |||
configParam(SLOPE_CV_PARAM, -1.0, 1.0, 0.0, "Slope CV", "%", 0, 100); | |||
configParam(FREQUENCY_CV_PARAM, -1.0, 1.0, 0.0, "Frequency CV", "%", 0, 100); | |||
configParam(SMOOTHNESS_CV_PARAM, -1.0, 1.0, 0.0, "Smoothness CV", "%", 0, 100); | |||
configParam(SHAPE_CV_PARAM, -1.0, 1.0, 0.0, "Shape CV", "%", 0, 100); | |||
configParam(SHIFT_CV_PARAM, -1.0, 1.0, 0.0, "Shift CV", "%", 0, 100); | |||
configInput(SLOPE_INPUT, "Slope"); | |||
configInput(FREQUENCY_INPUT, "Frequency"); | |||
configInput(V_OCT_INPUT, "Pitch (1V/oct)"); | |||
configInput(SMOOTHNESS_INPUT, "Smoothness"); | |||
configInput(SHAPE_INPUT, "Shape"); | |||
configInput(SHIFT_INPUT, "Shift"); | |||
configInput(TRIG_INPUT, "Trigger"); | |||
configInput(CLOCK_INPUT, "Clock"); | |||
for (int c = 0; c < 4; c++) { | |||
configOutput(OUT_OUTPUTS + c, string::f("Channel %d", c + 1)); | |||
} | |||
poly_slope_generator.Init(); | |||
ratio_index_quantizer.Init(); | |||
@@ -41,14 +41,13 @@ struct Veils : Module { | |||
Veils() { | |||
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
configParam(GAIN1_PARAM, 0.0, 1.0, 0.0, "Gain 1"); | |||
configParam(GAIN2_PARAM, 0.0, 1.0, 0.0, "Gain 2"); | |||
configParam(GAIN3_PARAM, 0.0, 1.0, 0.0, "Gain 3"); | |||
configParam(GAIN4_PARAM, 0.0, 1.0, 0.0, "Gain 4"); | |||
configParam(RESPONSE1_PARAM, 0.0, 1.0, 1.0, "Response curve 1"); | |||
configParam(RESPONSE2_PARAM, 0.0, 1.0, 1.0, "Response curve 2"); | |||
configParam(RESPONSE3_PARAM, 0.0, 1.0, 1.0, "Response curve 3"); | |||
configParam(RESPONSE4_PARAM, 0.0, 1.0, 1.0, "Response curve 4"); | |||
for (int c = 0; c < 4; c++) { | |||
configParam(GAIN1_PARAM + c, -1.0, 1.0, 0.0, string::f("Channel %d gain", c + 1), "%", 0, 100); | |||
configParam(RESPONSE1_PARAM + c, -1.0, 1.0, 0.0, string::f("Channel %d response", c + 1)); | |||
configInput(IN1_INPUT + c, string::f("Channel %d", c + 1)); | |||
configInput(CV1_INPUT + c, string::f("Channel %d CV", c + 1)); | |||
configOutput(OUT1_OUTPUT + c, string::f("Channel %d", c + 1)); | |||
} | |||
} | |||
void process(const ProcessArgs& args) override { | |||
@@ -40,11 +40,21 @@ struct Warps : Module { | |||
Warps() { | |||
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
configParam(ALGORITHM_PARAM, 0.0, 8.0, 0.0, "Modulation algorithm"); | |||
configParam(TIMBRE_PARAM, 0.0, 1.0, 0.5, "Modulation timbre"); | |||
configParam(STATE_PARAM, 0.0, 1.0, 0.0, "Internal oscillator state"); | |||
configParam(LEVEL1_PARAM, 0.0, 1.0, 1.0, "External oscillator amplitude/internal oscillator frequency"); | |||
configParam(LEVEL2_PARAM, 0.0, 1.0, 1.0, "Modulator amplitude"); | |||
configParam(ALGORITHM_PARAM, 0.0, 8.0, 0.0, "Algorithm"); | |||
configParam(TIMBRE_PARAM, 0.0, 1.0, 0.5, "Timbre", "%", 0, 100); | |||
configButton(STATE_PARAM, "Internal oscillator mode"); | |||
configParam(LEVEL1_PARAM, 0.0, 1.0, 1.0, "External oscillator amplitude / internal oscillator frequency", "%", 0, 100); | |||
configParam(LEVEL2_PARAM, 0.0, 1.0, 1.0, "Modulator amplitude", "%", 0, 100); | |||
configInput(LEVEL1_INPUT, "Level 1"); | |||
configInput(LEVEL2_INPUT, "Level 2"); | |||
configInput(ALGORITHM_INPUT, "Algorithm"); | |||
configInput(TIMBRE_INPUT, "Timbre"); | |||
configInput(CARRIER_INPUT, "Carrier"); | |||
configInput(MODULATOR_INPUT, "Modulator"); | |||
configOutput(MODULATOR_OUTPUT, "Modulator"); | |||
configOutput(AUX_OUTPUT, "Auxiliary"); | |||
memset(&modulator, 0, sizeof(modulator)); | |||
modulator.Init(96000.0f); | |||