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