From 00473d40cec2d13045a0ca463aaeeaa9b5877311 Mon Sep 17 00:00:00 2001 From: Holger Wirtz Date: Fri, 8 Nov 2019 14:32:03 +0100 Subject: [PATCH] Filter parameters per engine. Adding soften value changes for filter parameters. --- MicroDexed.ino | 28 +++-- UI.hpp | 284 +++++++++++++++++++++++++------------------------ config.h | 2 + 3 files changed, 164 insertions(+), 150 deletions(-) diff --git a/MicroDexed.ino b/MicroDexed.ino index 7e3f236..bdf2d06 100644 --- a/MicroDexed.ino +++ b/MicroDexed.ino @@ -59,6 +59,9 @@ AudioOutputUSB usb1; #endif AudioEffectStereoMono stereomono1; +// +// Dynamic patching +// uint8_t nDynamic = 0; #ifdef USE_REVERB AudioConnection * dynamicConnections[NUM_DEXED * 7]; @@ -412,9 +415,9 @@ void setup() { soften_filter_res[instance_id].init(configuration.dexed[instance_id].filter_resonance); soften_filter_cut[instance_id].init(configuration.dexed[instance_id].filter_cutoff); - MicroDexed[instance_id]->fx.Gain = mapfloat(configuration.dexed[instance_id].loudness, LOUDNESS_MIN, LOUDNESS_MAX, 0.0, 1.0); - MicroDexed[instance_id]->fx.Reso = mapfloat(configuration.dexed[instance_id].filter_resonance, FILTER_RESONANCE_MIN, FILTER_RESONANCE_MAX, 0.0, 1.0); - MicroDexed[instance_id]->fx.Cutoff = mapfloat(configuration.dexed[instance_id].filter_cutoff, FILTER_CUTOFF_MIN, FILTER_CUTOFF_MAX, 0.0, 1.0); + MicroDexed[instance_id]->fx.Gain = mapfloat(configuration.dexed[instance_id].loudness, LOUDNESS_MIN, LOUDNESS_MAX, 0.0, 1.0); + MicroDexed[instance_id]->fx.Reso = mapfloat(FILTER_RESONANCE_MAX - configuration.dexed[instance_id].filter_resonance, FILTER_RESONANCE_MIN, FILTER_RESONANCE_MAX, 1.0, 0.0); + MicroDexed[instance_id]->fx.Cutoff = mapfloat(FILTER_CUTOFF_MAX - configuration.dexed[instance_id].filter_cutoff, FILTER_CUTOFF_MIN, FILTER_CUTOFF_MAX, 1.0, 0.0); MicroDexed[instance_id]->doRefreshVoice(); } @@ -531,7 +534,7 @@ void loop() if (soften_filter_res[i].running()) { // soften filter resonance value - MicroDexed[i]->fx.Reso = soften_filter_res[i].value(); + MicroDexed[i]->fx.Reso = (FILTER_RESONANCE_MAX - soften_filter_res[i].value()) / 100.0; #ifdef DEBUG Serial.print(F("Filter-Resonance: ")); @@ -545,7 +548,7 @@ void loop() // soften filter cutoff value if (soften_filter_cut[i].running()) { - MicroDexed[i]->fx.Cutoff = soften_filter_cut[i].value(); + MicroDexed[i]->fx.Cutoff = (FILTER_CUTOFF_MAX - soften_filter_cut[i].value()) / 100.0; #ifdef DEBUG Serial.print(F("Filter-Cutoff: ")); Serial.print(MicroDexed[i]->fx.Cutoff, 5); @@ -658,9 +661,12 @@ void handleControlChange(byte inChannel, byte inCtrl, byte inValue) break; case 64: MicroDexed[instance_id]->setSustain(inValue > 63); - if (!MicroDexed[instance_id]->getSustain()) { - for (uint8_t note = 0; note < MicroDexed[instance_id]->getMaxNotes(); note++) { - if (MicroDexed[instance_id]->voices[note].sustained && !MicroDexed[instance_id]->voices[note].keydown) { + if (!MicroDexed[instance_id]->getSustain()) + { + for (uint8_t note = 0; note < MicroDexed[instance_id]->getMaxNotes(); note++) + { + if (MicroDexed[instance_id]->voices[note].sustained && !MicroDexed[instance_id]->voices[note].keydown) + { MicroDexed[instance_id]->voices[note].dx7_note->keyup(); MicroDexed[instance_id]->voices[note].sustained = false; } @@ -669,11 +675,13 @@ void handleControlChange(byte inChannel, byte inCtrl, byte inValue) break; case 103: // CC 103: filter resonance configuration.dexed[instance_id].filter_resonance = map(inValue, 0, 0x7f, FILTER_RESONANCE_MIN, FILTER_RESONANCE_MAX); - MicroDexed[instance_id]->fx.Reso = configuration.dexed[instance_id].filter_resonance / 100.0; + //MicroDexed[instance_id]->fx.Reso = (100 - configuration.dexed[instance_id].filter_resonance) / 100.0; + soften_filter_res[instance_id].update(soften_filter_res[instance_id].value() + (FILTER_RESONANCE_MAX - FILTER_RESONANCE_MIN) / FILTER_RESONANCE_ENC_STEPS, SOFTEN_VALUE_CHANGE_STEPS); break; case 104: // CC 104: filter cutoff configuration.dexed[instance_id].filter_cutoff = map(inValue, 0, 0x7f, FILTER_CUTOFF_MIN, FILTER_CUTOFF_MAX); - MicroDexed[instance_id]->fx.Cutoff = configuration.dexed[instance_id].filter_cutoff / 100.0; + //MicroDexed[instance_id]->fx.Cutoff = (100 - configuration.dexed[instance_id].filter_cutoff) / 100.0; + soften_filter_cut[instance_id].update(soften_filter_cut[instance_id].value() + (FILTER_CUTOFF_MAX - FILTER_CUTOFF_MIN) / FILTER_CUTOFF_ENC_STEPS, SOFTEN_VALUE_CHANGE_STEPS); break; case 105: // CC 105: delay time configuration.delay_time = map(inValue, 0, 0x7f, DELAY_TIME_MIN, DELAY_TIME_MAX); diff --git a/UI.hpp b/UI.hpp index 5ae21a1..1e604ba 100644 --- a/UI.hpp +++ b/UI.hpp @@ -180,99 +180,101 @@ LCDMenuLib2 LCDML(LCDML_0, _LCDML_DISP_rows, _LCDML_DISP_cols, lcdml_menu_displa // LCDML_add(id, prev_layer, new_num, lang_char_array, callback_function) #if NUM_DEXED > 1 LCDML_add(0, LCDML_0, 1, "Setup", NULL); -LCDML_add(1, LCDML_0_1, 1, "Instances", UI_function_not_implemented); -LCDML_add(2, LCDML_0_1, 2, "Instance 1", NULL); -LCDML_add(3, LCDML_0_1_2, 1, "MIDI Channel 1", UI_func_midi_channel); -LCDML_add(4, LCDML_0_1_2, 2, "Loudness 1", UI_func_loudness); -LCDML_add(5, LCDML_0_1_2, 3, "Reverb Send 1", UI_func_reverb_send); -LCDML_add(6, LCDML_0_1_2, 4, "Chorus Send 1", UI_func_chorus_send); -LCDML_add(7, LCDML_0_1_2, 5, "Delay Send 1", UI_func_delay_send); -LCDML_add(8, LCDML_0_1_2, 6, "Panorama 1", UI_func_panorama); -LCDML_add(9, LCDML_0_1_2, 7, "Polyphony 1", UI_func_polyphony); -LCDML_add(10, LCDML_0_1_2, 8, "Engine 1", UI_func_engine); -LCDML_add(11, LCDML_0_1_2, 9, "Mono/Poly 1", UI_func_mono_poly); -LCDML_add(12, LCDML_0_1_2, 10, "Pitchbend 1", NULL); -LCDML_add(13, LCDML_0_1_2_7, 1, "PB Range 1", UI_func_pb_range); -LCDML_add(14, LCDML_0_1_2_7, 2, "PB Step 1", UI_func_pb_step); -LCDML_add(15, LCDML_0_1_2, 11, "Mod Wheel 1", NULL); -LCDML_add(16, LCDML_0_1_2_8, 1, "MW Range 1", UI_func_mw_range); -LCDML_add(17, LCDML_0_1_2_8, 2, "MW Assign 1", UI_func_mw_assign); -LCDML_add(18, LCDML_0_1_2, 12, "Foot Ctrl 1", NULL); -LCDML_add(19, LCDML_0_1_2_9, 1, "FC Range 1", UI_func_fc_range); -LCDML_add(20, LCDML_0_1_2_9, 2, "FC Assign 1", UI_func_fc_assign); -LCDML_add(21, LCDML_0_1_2, 13, "Breath Ctrl 1", NULL); -LCDML_add(22, LCDML_0_1_2_10, 1, "BC Range 1", UI_func_bc_range); -LCDML_add(23, LCDML_0_1_2_10, 2, "BC Assign 1", UI_func_bc_assign); -LCDML_add(24, LCDML_0_1_2, 14, "Aftertouch 1", NULL); -LCDML_add(25, LCDML_0_1_2_11, 1, "AT Range 1", UI_func_at_range); -LCDML_add(26, LCDML_0_1_2_11, 2, "AT Assign 1", UI_func_at_assign); -LCDML_add(27, LCDML_0_1_2, 15, "Portamento 1", NULL); -LCDML_add(28, LCDML_0_1_2_12, 1, "Port. Mode 1", UI_function_not_enabled); -LCDML_add(29, LCDML_0_1_2_12, 2, "Port. Gliss 1", UI_function_not_enabled); -LCDML_add(30, LCDML_0_1_2_12, 3, "Port. Time 1", UI_function_not_enabled); -LCDML_add(31, LCDML_0_1_2, 16, "Operator 1", NULL); -LCDML_add(32, LCDML_0_1_2_13, 1, "OP1 1", UI_func_OP1); -LCDML_add(33, LCDML_0_1_2_13, 2, "OP2 1", UI_func_OP2); -LCDML_add(34, LCDML_0_1_2_13, 3, "OP3 1", UI_func_OP3); -LCDML_add(35, LCDML_0_1_2_13, 4, "OP4 1", UI_func_OP4); -LCDML_add(36, LCDML_0_1_2_13, 5, "OP5 1", UI_func_OP5); -LCDML_add(37, LCDML_0_1_2_13, 6, "OP6 1", UI_func_OP6); -LCDML_add(38, LCDML_0_1, 3, "Instance 2", NULL); -LCDML_add(39, LCDML_0_1_3, 1, "MIDI Channel 2", UI_func_midi_channel); -LCDML_add(40, LCDML_0_1_3, 2, "Loudness 2", UI_func_loudness); -LCDML_add(41, LCDML_0_1_3, 3, "Reverb Send 2", UI_func_reverb_send); -LCDML_add(42, LCDML_0_1_3, 4, "Chorus Send 2", UI_func_chorus_send); -LCDML_add(43, LCDML_0_1_3, 5, "Delay Send 2", UI_func_delay_send); -LCDML_add(44, LCDML_0_1_3, 6, "Panorama 2", UI_func_panorama); -LCDML_add(45, LCDML_0_1_3, 7, "Polyphony 2", UI_func_polyphony); -LCDML_add(46, LCDML_0_1_3, 8, "Engine 2", UI_func_engine); -LCDML_add(47, LCDML_0_1_3, 9, "Mono/Poly 2", UI_func_mono_poly); -LCDML_add(48, LCDML_0_1_3, 10, "Pitchbend 2", NULL); -LCDML_add(49, LCDML_0_1_3_7, 1, "PB Range 2", UI_func_pb_range); -LCDML_add(50, LCDML_0_1_3_7, 2, "PB Step 2", UI_func_pb_step); -LCDML_add(51, LCDML_0_1_3, 11, "Mod Wheel 2", NULL); -LCDML_add(52, LCDML_0_1_3_8, 1, "MW Range 2", UI_func_mw_range); -LCDML_add(53, LCDML_0_1_3_8, 2, "MW Assign 2", UI_func_mw_assign); -LCDML_add(54, LCDML_0_1_3, 12, "Foot Ctrl 2", NULL); -LCDML_add(55, LCDML_0_1_3_9, 1, "FC Range 2", UI_func_fc_range); -LCDML_add(56, LCDML_0_1_3_9, 2, "FC Assign 2", UI_func_fc_assign); -LCDML_add(57, LCDML_0_1_3, 13, "Breat Ctrl 2", NULL); -LCDML_add(58, LCDML_0_1_3_10, 1, "BC Range 2", UI_func_bc_range); -LCDML_add(59, LCDML_0_1_3_10, 2, "BC Assign 2", UI_func_bc_assign); -LCDML_add(60, LCDML_0_1_3, 14, "Aftertouch 2", NULL); -LCDML_add(61, LCDML_0_1_3_11, 1, "AT Range 2", UI_func_at_range); -LCDML_add(62, LCDML_0_1_3_11, 2, "AT Assign 2", UI_func_at_assign); -LCDML_add(63, LCDML_0_1_3, 15, "Portamento 2", NULL); -LCDML_add(64, LCDML_0_1_3_12, 1, "Port. Mode 2", UI_function_not_enabled); -LCDML_add(65, LCDML_0_1_3_12, 2, "Port. Gliss 2", UI_function_not_enabled); -LCDML_add(66, LCDML_0_1_3_12, 3, "Port. Time 2", UI_function_not_enabled); -LCDML_add(67, LCDML_0_1_3, 16, "Operator 2", NULL); -LCDML_add(68, LCDML_0_1_3_13, 1, "OP1 2", UI_func_OP1); -LCDML_add(69, LCDML_0_1_3_13, 2, "OP2 2", UI_func_OP2); -LCDML_add(70, LCDML_0_1_3_13, 3, "OP3 2", UI_func_OP3); -LCDML_add(71, LCDML_0_1_3_13, 4, "OP4 2", UI_func_OP4); -LCDML_add(72, LCDML_0_1_3_13, 5, "OP5 2", UI_func_OP5); -LCDML_add(73, LCDML_0_1_3_13, 6, "OP6 2", UI_func_OP6); -LCDML_add(74, LCDML_0, 2, "Effect", NULL); -LCDML_add(75, LCDML_0_2, 1, "Reverb", NULL); -LCDML_add(76, LCDML_0_2_1, 1, "Roomsize", UI_func_reverb_roomsize); -LCDML_add(77, LCDML_0_2_1, 2, "Damping", UI_func_reverb_damping); -LCDML_add(78, LCDML_0_2, 2, "Chorus", NULL); -LCDML_add(79, LCDML_0_2_2, 1, "Frequency", UI_func_chorus_frequency); -LCDML_add(80, LCDML_0_2_2, 2, "Waveform", UI_func_chorus_waveform); -LCDML_add(81, LCDML_0_2_2, 3, "Depth", UI_func_chorus_depth); -LCDML_add(82, LCDML_0_2, 3, "Delay", NULL); -LCDML_add(83, LCDML_0_2_3, 1, "Time", UI_func_delay_time); -LCDML_add(84, LCDML_0_2_3, 2, "Feedback", UI_func_delay_feedback); -LCDML_add(85, LCDML_0_2, 4, "Filter", NULL); -LCDML_add(86, LCDML_0_2_4, 1, "Cutoff", UI_func_filter_cutoff); -LCDML_add(87, LCDML_0_2_4, 2, "Resonance", UI_func_filter_resonance); -LCDML_add(88, LCDML_0, 3, "Store", NULL); -LCDML_add(89, LCDML_0, 4, "System", NULL); -LCDML_add(90, LCDML_0_4, 1, "Stereo/Mono", UI_func_stereo_mono); -LCDML_add(91, LCDML_0, 5, "Info", UI_func_information); -#define _LCDML_DISP_cnt 91 -#define MENU_ID_OF_INSTANCE_2 38 +LCDML_add(1, LCDML_0_1, 1, "Instance 1", NULL); +LCDML_add(2, LCDML_0_1_1, 1, "MIDI Channel 1", UI_func_midi_channel); +LCDML_add(3, LCDML_0_1_1, 2, "Loudness 1", UI_func_loudness); +LCDML_add(4, LCDML_0_1_1, 3, "Reverb Send 1", UI_func_reverb_send); +LCDML_add(5, LCDML_0_1_1, 4, "Chorus Send 1", UI_func_chorus_send); +LCDML_add(6, LCDML_0_1_1, 5, "Delay Send 1", UI_func_delay_send); +LCDML_add(7, LCDML_0_1_1, 6, "Filter 1", NULL); +LCDML_add(8, LCDML_0_1_1_6, 1, "Cutoff 1", UI_func_filter_cutoff); +LCDML_add(9, LCDML_0_1_1_6, 2, "Resonance 1", UI_func_filter_resonance); +LCDML_add(10, LCDML_0_1_1, 7, "Panorama 1", UI_func_panorama); +LCDML_add(11, LCDML_0_1_1, 8, "Polyphony 1", UI_func_polyphony); +LCDML_add(12, LCDML_0_1_1, 9, "Engine 1", UI_func_engine); +LCDML_add(13, LCDML_0_1_1, 10, "Mono/Poly 1", UI_func_mono_poly); +LCDML_add(14, LCDML_0_1_1, 11, "Pitchbend 1", NULL); +LCDML_add(15, LCDML_0_1_1_11, 1, "PB Range 1", UI_func_pb_range); +LCDML_add(16, LCDML_0_1_1_11, 2, "PB Step 1", UI_func_pb_step); +LCDML_add(17, LCDML_0_1_1, 12, "Mod Wheel 1", NULL); +LCDML_add(18, LCDML_0_1_1_12, 1, "MW Range 1", UI_func_mw_range); +LCDML_add(19, LCDML_0_1_1_12, 2, "MW Assign 1", UI_func_mw_assign); +LCDML_add(20, LCDML_0_1_1, 13, "Foot Ctrl 1", NULL); +LCDML_add(21, LCDML_0_1_1_13, 1, "FC Range 1", UI_func_fc_range); +LCDML_add(22, LCDML_0_1_1_13, 2, "FC Assign 1", UI_func_fc_assign); +LCDML_add(23, LCDML_0_1_1, 14, "Breath Ctrl 1", NULL); +LCDML_add(24, LCDML_0_1_1_14, 1, "BC Range 1", UI_func_bc_range); +LCDML_add(25, LCDML_0_1_1_14, 2, "BC Assign 1", UI_func_bc_assign); +LCDML_add(26, LCDML_0_1_1, 15, "Aftertouch 1", NULL); +LCDML_add(27, LCDML_0_1_1_15, 1, "AT Range 1", UI_func_at_range); +LCDML_add(28, LCDML_0_1_1_15, 2, "AT Assign 1", UI_func_at_assign); +LCDML_add(29, LCDML_0_1_1, 16, "Portamento 1", NULL); +LCDML_add(30, LCDML_0_1_1_16, 1, "Port. Mode 1", UI_function_not_enabled); +LCDML_add(31, LCDML_0_1_1_16, 2, "Port. Gliss 1", UI_function_not_enabled); +LCDML_add(32, LCDML_0_1_1_16, 3, "Port. Time 1", UI_function_not_enabled); +LCDML_add(33, LCDML_0_1_1, 17, "Operator 1", NULL); +LCDML_add(34, LCDML_0_1_1_17, 1, "OP1 1", UI_func_OP1); +LCDML_add(35, LCDML_0_1_1_17, 2, "OP2 1", UI_func_OP2); +LCDML_add(36, LCDML_0_1_1_17, 3, "OP3 1", UI_func_OP3); +LCDML_add(37, LCDML_0_1_1_17, 4, "OP4 1", UI_func_OP4); +LCDML_add(38, LCDML_0_1_1_17, 5, "OP5 1", UI_func_OP5); +LCDML_add(39, LCDML_0_1_1_17, 6, "OP6 1", UI_func_OP6); +LCDML_add(40, LCDML_0_1, 2, "Instance 2", NULL); +LCDML_add(41, LCDML_0_1_2, 1, "MIDI Channel 2", UI_func_midi_channel); +LCDML_add(42, LCDML_0_1_2, 2, "Loudness 2", UI_func_loudness); +LCDML_add(43, LCDML_0_1_2, 3, "Reverb Send 2", UI_func_reverb_send); +LCDML_add(44, LCDML_0_1_2, 4, "Chorus Send 2", UI_func_chorus_send); +LCDML_add(45, LCDML_0_1_2, 5, "Delay Send 2", UI_func_delay_send); +LCDML_add(46, LCDML_0_1_2, 6, "Filter 1", NULL); +LCDML_add(47, LCDML_0_1_2_6, 1, "Cutoff 1", UI_func_filter_cutoff); +LCDML_add(48, LCDML_0_1_2_6, 2, "Resonance 1", UI_func_filter_resonance); +LCDML_add(49, LCDML_0_1_2, 7, "Panorama 2", UI_func_panorama); +LCDML_add(50, LCDML_0_1_2, 8, "Polyphony 2", UI_func_polyphony); +LCDML_add(51, LCDML_0_1_2, 9, "Engine 2", UI_func_engine); +LCDML_add(52, LCDML_0_1_2, 10, "Mono/Poly 2", UI_func_mono_poly); +LCDML_add(53, LCDML_0_1_2, 11, "Pitchbend 2", NULL); +LCDML_add(54, LCDML_0_1_2_11, 1, "PB Range 2", UI_func_pb_range); +LCDML_add(55, LCDML_0_1_2_11, 2, "PB Step 2", UI_func_pb_step); +LCDML_add(56, LCDML_0_1_2, 12, "Mod Wheel 2", NULL); +LCDML_add(57, LCDML_0_1_2_12, 1, "MW Range 2", UI_func_mw_range); +LCDML_add(58, LCDML_0_1_2_12, 2, "MW Assign 2", UI_func_mw_assign); +LCDML_add(59, LCDML_0_1_2, 13, "Foot Ctrl 2", NULL); +LCDML_add(60, LCDML_0_1_2_13, 1, "FC Range 2", UI_func_fc_range); +LCDML_add(61, LCDML_0_1_2_13, 2, "FC Assign 2", UI_func_fc_assign); +LCDML_add(62, LCDML_0_1_2, 14, "Breat Ctrl 2", NULL); +LCDML_add(63, LCDML_0_1_2_14, 1, "BC Range 2", UI_func_bc_range); +LCDML_add(64, LCDML_0_1_2_14, 2, "BC Assign 2", UI_func_bc_assign); +LCDML_add(65, LCDML_0_1_2, 15, "Aftertouch 2", NULL); +LCDML_add(66, LCDML_0_1_2_15, 1, "AT Range 2", UI_func_at_range); +LCDML_add(67, LCDML_0_1_2_15, 2, "AT Assign 2", UI_func_at_assign); +LCDML_add(68, LCDML_0_1_2, 16, "Portamento 2", NULL); +LCDML_add(69, LCDML_0_1_2_16, 1, "Port. Mode 2", UI_function_not_enabled); +LCDML_add(70, LCDML_0_1_2_16, 2, "Port. Gliss 2", UI_function_not_enabled); +LCDML_add(71, LCDML_0_1_2_16, 3, "Port. Time 2", UI_function_not_enabled); +LCDML_add(72, LCDML_0_1_2, 17, "Operator 2", NULL); +LCDML_add(73, LCDML_0_1_2_17, 1, "OP1 2", UI_func_OP1); +LCDML_add(74, LCDML_0_1_2_17, 2, "OP2 2", UI_func_OP2); +LCDML_add(75, LCDML_0_1_2_17, 3, "OP3 2", UI_func_OP3); +LCDML_add(76, LCDML_0_1_2_17, 4, "OP4 2", UI_func_OP4); +LCDML_add(77, LCDML_0_1_2_17, 5, "OP5 2", UI_func_OP5); +LCDML_add(78, LCDML_0_1_2_17, 6, "OP6 2", UI_func_OP6); +LCDML_add(79, LCDML_0, 2, "Effect", NULL); +LCDML_add(80, LCDML_0_2, 1, "Reverb", NULL); +LCDML_add(81, LCDML_0_2_1, 1, "Roomsize", UI_func_reverb_roomsize); +LCDML_add(82, LCDML_0_2_1, 2, "Damping", UI_func_reverb_damping); +LCDML_add(83, LCDML_0_2, 2, "Chorus", NULL); +LCDML_add(84, LCDML_0_2_2, 1, "Frequency", UI_func_chorus_frequency); +LCDML_add(85, LCDML_0_2_2, 2, "Waveform", UI_func_chorus_waveform); +LCDML_add(86, LCDML_0_2_2, 3, "Depth", UI_func_chorus_depth); +LCDML_add(87, LCDML_0_2, 3, "Delay", NULL); +LCDML_add(88, LCDML_0_2_3, 1, "Time", UI_func_delay_time); +LCDML_add(89, LCDML_0_2_3, 2, "Feedback", UI_func_delay_feedback); +LCDML_add(90, LCDML_0, 3, "Store", NULL); +LCDML_add(91, LCDML_0, 4, "System", NULL); +LCDML_add(92, LCDML_0_4, 1, "Stereo/Mono", UI_func_stereo_mono); +LCDML_add(93, LCDML_0, 5, "Info", UI_func_information); +#define _LCDML_DISP_cnt 93 +#define MENU_ID_OF_INSTANCE_2 40 #else LCDML_add(0, LCDML_0, 1, "Setup", NULL); LCDML_add(1, LCDML_0_1, 1, "MIDI Channel", UI_func_midi_channel); @@ -280,56 +282,56 @@ LCDML_add(2, LCDML_0_1, 2, "Loudness", UI_func_loudness); LCDML_add(3, LCDML_0_1, 3, "Reverb Send", UI_func_reverb_send); LCDML_add(4, LCDML_0_1, 4, "Chorus Send", UI_func_chorus_send); LCDML_add(5, LCDML_0_1, 5, "Delay Send", UI_func_delay_send); -LCDML_add(6, LCDML_0_1, 6, "Panorama", UI_func_panorama); -LCDML_add(7, LCDML_0_1, 7, "Polyphony", UI_func_polyphony); -LCDML_add(8, LCDML_0_1, 8, "Engine", UI_func_engine); -LCDML_add(9, LCDML_0_1, 9, "Mono/Poly", UI_func_mono_poly); -LCDML_add(10, LCDML_0_1, 10, "Pitchbend", NULL); -LCDML_add(11, LCDML_0_1_10, 1, "PB Range", UI_func_pb_range); -LCDML_add(12, LCDML_0_1_10, 2, "PB Step", UI_func_pb_step); -LCDML_add(13, LCDML_0_1, 11, "Mod Wheel", NULL); -LCDML_add(14, LCDML_0_1_11, 1, "MW Range", UI_func_mw_range); -LCDML_add(15, LCDML_0_1_11, 2, "MW Assign", UI_func_mw_assign); -LCDML_add(16, LCDML_0_1, 12, "Foot Ctrl", NULL); -LCDML_add(17, LCDML_0_1_12, 1, "FC Range", UI_func_fc_range); -LCDML_add(18, LCDML_0_1_12, 2, "FC Assign", UI_func_fc_assign); -LCDML_add(19, LCDML_0_1, 13, "Breath Ctrl", NULL); -LCDML_add(20, LCDML_0_1_13, 1, "BC Range", UI_func_bc_range); -LCDML_add(21, LCDML_0_1_13, 2, "BC Assign", UI_func_bc_assign); -LCDML_add(22, LCDML_0_1, 14, "Aftertouch", NULL); -LCDML_add(23, LCDML_0_1_14, 1, "AT Range", UI_func_at_range); -LCDML_add(24, LCDML_0_1_14, 2, "AT Assign", UI_func_at_assign); -LCDML_add(25, LCDML_0_1, 15, "Portamento", NULL); -LCDML_add(26, LCDML_0_1_15, 1, "Port. Mode", UI_function_not_implemented); -LCDML_add(27, LCDML_0_1_15, 2, "Port. Gliss", UI_function_not_implemented); -LCDML_add(28, LCDML_0_1_15, 3, "Port. Time", UI_function_not_implemented); -LCDML_add(29, LCDML_0_1, 16, "Operator", NULL); -LCDML_add(30, LCDML_0_1_16, 1, "OP1", UI_func_OP1); -LCDML_add(31, LCDML_0_1_16, 2, "OP2", UI_func_OP2); -LCDML_add(32, LCDML_0_1_16, 3, "OP3", UI_func_OP3); -LCDML_add(33, LCDML_0_1_16, 4, "OP4", UI_func_OP4); -LCDML_add(34, LCDML_0_1_16, 5, "OP5", UI_func_OP5); -LCDML_add(35, LCDML_0_1_16, 6, "OP6", UI_func_OP6); -LCDML_add(36, LCDML_0, 2, "Effect", NULL); -LCDML_add(37, LCDML_0_2, 1, "Reverb", NULL); -LCDML_add(38, LCDML_0_2_1, 1, "Roomsize", UI_func_reverb_roomsize); -LCDML_add(39, LCDML_0_2_1, 2, "Damping", UI_func_reverb_damping); -LCDML_add(40, LCDML_0_2, 2, "Chorus", NULL); -LCDML_add(41, LCDML_0_2_2, 1, "Frequency", UI_func_chorus_frequency); -LCDML_add(42, LCDML_0_2_2, 2, "Waveform", UI_func_chorus_waveform); -LCDML_add(43, LCDML_0_2_2, 3, "Depth", UI_func_chorus_depth); -LCDML_add(44, LCDML_0_2, 3, "Delay", NULL); -LCDML_add(45, LCDML_0_2_3, 1, "Time", UI_func_delay_time); -LCDML_add(46, LCDML_0_2_3, 2, "Feedback", UI_func_delay_feedback); -LCDML_add(47, LCDML_0_2, 4, "Filter", NULL); -LCDML_add(48, LCDML_0_2_4, 1, "Cutoff", UI_func_filter_cutoff); -LCDML_add(49, LCDML_0_2_4, 2, "Resonance", UI_func_filter_resonance); +LCDML_add(6, LCDML_0_1, 6, "Filter", NULL); +LCDML_add(7, LCDML_0_1_6, 1, "Cutoff", UI_func_filter_cutoff); +LCDML_add(8, LCDML_0_1_6, 2, "Resonance", UI_func_filter_resonance); +LCDML_add(9, LCDML_0_1, 7, "Panorama", UI_func_panorama); +LCDML_add(10, LCDML_0_1, 8, "Polyphony", UI_func_polyphony); +LCDML_add(11, LCDML_0_1, 9, "Engine", UI_func_engine); +LCDML_add(12, LCDML_0_1, 10, "Mono/Poly", UI_func_mono_poly); +LCDML_add(13, LCDML_0_1, 11, "Pitchbend", NULL); +LCDML_add(14, LCDML_0_1_11, 1, "PB Range", UI_func_pb_range); +LCDML_add(15, LCDML_0_1_11, 2, "PB Step", UI_func_pb_step); +LCDML_add(16, LCDML_0_1, 12, "Mod Wheel", NULL); +LCDML_add(17, LCDML_0_1_12, 1, "MW Range", UI_func_mw_range); +LCDML_add(18, LCDML_0_1_12, 2, "MW Assign", UI_func_mw_assign); +LCDML_add(19, LCDML_0_1, 13, "Foot Ctrl", NULL); +LCDML_add(20, LCDML_0_1_13, 1, "FC Range", UI_func_fc_range); +LCDML_add(21, LCDML_0_1_13, 2, "FC Assign", UI_func_fc_assign); +LCDML_add(22, LCDML_0_1, 14, "Breath Ctrl", NULL); +LCDML_add(23, LCDML_0_1_14, 1, "BC Range", UI_func_bc_range); +LCDML_add(24, LCDML_0_1_14, 2, "BC Assign", UI_func_bc_assign); +LCDML_add(25, LCDML_0_1, 15, "Aftertouch", NULL); +LCDML_add(26, LCDML_0_1_15, 1, "AT Range", UI_func_at_range); +LCDML_add(27, LCDML_0_1_15, 2, "AT Assign", UI_func_at_assign); +LCDML_add(28, LCDML_0_1, 16, "Portamento", NULL); +LCDML_add(29, LCDML_0_1_16, 1, "Port. Mode", UI_function_not_implemented); +LCDML_add(30, LCDML_0_1_16, 2, "Port. Gliss", UI_function_not_implemented); +LCDML_add(31, LCDML_0_1_16, 3, "Port. Time", UI_function_not_implemented); +LCDML_add(32, LCDML_0_1, 17, "Operator", NULL); +LCDML_add(33, LCDML_0_1_17, 1, "OP1", UI_func_OP1); +LCDML_add(34, LCDML_0_1_17, 2, "OP2", UI_func_OP2); +LCDML_add(35, LCDML_0_1_17, 3, "OP3", UI_func_OP3); +LCDML_add(36, LCDML_0_1_17, 4, "OP4", UI_func_OP4); +LCDML_add(37, LCDML_0_1_17, 5, "OP5", UI_func_OP5); +LCDML_add(38, LCDML_0_1_17, 6, "OP6", UI_func_OP6); +LCDML_add(39, LCDML_0, 2, "Effect", NULL); +LCDML_add(40, LCDML_0_2, 1, "Reverb", NULL); +LCDML_add(41, LCDML_0_2_1, 1, "Roomsize", UI_func_reverb_roomsize); +LCDML_add(42, LCDML_0_2_1, 2, "Damping", UI_func_reverb_damping); +LCDML_add(43, LCDML_0_2, 2, "Chorus", NULL); +LCDML_add(44, LCDML_0_2_2, 1, "Frequency", UI_func_chorus_frequency); +LCDML_add(45, LCDML_0_2_2, 2, "Waveform", UI_func_chorus_waveform); +LCDML_add(46, LCDML_0_2_2, 3, "Depth", UI_func_chorus_depth); +LCDML_add(47, LCDML_0_2, 3, "Delay", NULL); +LCDML_add(48, LCDML_0_2_3, 1, "Time", UI_func_delay_time); +LCDML_add(49, LCDML_0_2_3, 2, "Feedback", UI_func_delay_feedback); LCDML_add(50, LCDML_0, 3, "Store", NULL); LCDML_add(51, LCDML_0, 4, "System", NULL); LCDML_add(52, LCDML_0_4, 1, "Stereo/Mono", UI_func_stereo_mono); LCDML_add(53, LCDML_0, 5, "Info", UI_func_information); #define _LCDML_DISP_cnt 53 -#define MENU_ID_OF_INSTANCE_2 36 +#define MENU_ID_OF_INSTANCE_2 39 #endif // create menu LCDML_createMenu(_LCDML_DISP_cnt); @@ -1461,7 +1463,8 @@ void UI_func_filter_cutoff(uint8_t param) Serial.print(" value: "); Serial.println(configuration.dexed[instance_id].filter_cutoff / 100.0, 3); - MicroDexed[instance_id]->fx.Cutoff = configuration.dexed[instance_id].filter_cutoff / 100.0; + //MicroDexed[instance_id]->fx.Cutoff = (100 - configuration.dexed[instance_id].filter_cutoff) / 100.0; + soften_filter_cut[instance_id].update(soften_filter_cut[instance_id].value() + (FILTER_CUTOFF_MAX - FILTER_CUTOFF_MIN) / FILTER_CUTOFF_ENC_STEPS, SOFTEN_VALUE_CHANGE_STEPS); } if (LCDML.FUNC_close()) // ****** STABLE END ********* @@ -1509,7 +1512,8 @@ void UI_func_filter_resonance(uint8_t param) lcd.setCursor(0, 1); lcd_display_int(configuration.dexed[instance_id].filter_resonance, 3, true, true, false); - MicroDexed[instance_id]->fx.Reso = configuration.dexed[instance_id].filter_resonance / 100.0; + //MicroDexed[instance_id]->fx.Reso = (100 - configuration.dexed[instance_id].filter_resonance) / 100.0; + soften_filter_res[instance_id].update(soften_filter_res[instance_id].value() + (FILTER_RESONANCE_MAX - FILTER_RESONANCE_MIN) / FILTER_RESONANCE_ENC_STEPS, SOFTEN_VALUE_CHANGE_STEPS); } if (LCDML.FUNC_close()) // ****** STABLE END ********* diff --git a/config.h b/config.h index 2457409..6c5d357 100644 --- a/config.h +++ b/config.h @@ -325,10 +325,12 @@ enum { DEXED, REVERB, DELAY, CHORUS }; #define FILTER_CUTOFF_MIN 0 #define FILTER_CUTOFF_MAX 100 #define FILTER_CUTOFF_DEFAULT 100 +#define FILTER_CUTOFF_ENC_STEPS 1 #define FILTER_RESONANCE_MIN 0 #define FILTER_RESONANCE_MAX 100 #define FILTER_RESONANCE_DEFAULT 100 +#define FILTER_RESONANCE_ENC_STEPS 1 #define LOUDNESS_MIN 0 #define LOUDNESS_MAX 100