diff --git a/UI.hpp b/UI.hpp index 341957f..56c718b 100644 --- a/UI.hpp +++ b/UI.hpp @@ -89,6 +89,14 @@ extern uint8_t seq_temp_active_menu; extern uint8_t seq_chain_active_chainstep; //for editor extern uint8_t seq_chain_active_step; extern int seq_transpose; +extern uint8_t arp_step; +extern uint8_t arp_note; +extern uint8_t arp_chord; +extern uint8_t arp_octave; +extern uint8_t arp_oct_usersetting; +extern uint8_t arp_style; +extern uint8_t arp_speed; +extern char arp_style_names[4][3]; #endif #ifdef DISPLAY_LCD_SPI @@ -273,6 +281,7 @@ void UI_func_seq_live_transpose_oct(uint8_t param); void UI_func_seq_lenght(uint8_t param); void UI_func_seq_tempo(uint8_t param); void UI_func_seq_pat_chain(uint8_t param); +void UI_func_arpeggio(uint8_t param); void UI_func_seq_track_setup(uint8_t param); void UI_func_seq_display_style(uint8_t param); void UI_func_seq_pattern_load(uint8_t param); @@ -3915,14 +3924,9 @@ void UI_func_seq_display_style(uint8_t param) lcd.setCursor(0, 0); lcd.print("Seq. Disp. Style"); lcd.setCursor(0, 1); - lcd.print("Seq."); + lcd.print("Pat."); lcd.setCursor(8, 1); lcd.print("="); - lcd.setCursor(11, 1); - if (seq_content_type[seq_active_track] == 0) - lcd.print("Drum"); - else - lcd.print("Inst"); } if (LCDML.FUNC_loop()) // ****** LOOP ********* { @@ -3943,21 +3947,17 @@ void UI_func_seq_display_style(uint8_t param) { if (LCDML.BT_checkDown()) { - seq_content_type[seq_active_track] = constrain(seq_content_type[seq_active_track] + ENCODER[ENC_R].speed(), 0, 1); + seq_content_type[seq_active_track] = constrain(seq_content_type[seq_active_track] + ENCODER[ENC_R].speed(), 0, 2); } else if (LCDML.BT_checkUp()) { - seq_content_type[seq_active_track] = constrain(seq_content_type[seq_active_track] - ENCODER[ENC_R].speed(), 0, 1); + seq_content_type[seq_active_track] = constrain(seq_content_type[seq_active_track] - ENCODER[ENC_R].speed(), 0, 2); } } } if (LCDML.BT_checkEnter()) { - if (menu_select_toggle) { - menu_select_toggle = false; - } else - { menu_select_toggle = true; - } + menu_select_toggle = !menu_select_toggle; } if (menu_select_toggle == false) { lcd.setCursor(10, 1); @@ -3968,10 +3968,6 @@ void UI_func_seq_display_style(uint8_t param) lcd.print("["); lcd.print(seq_active_track); lcd.print("]"); - lcd.setCursor(11, 1); - if (seq_content_type[seq_active_track] == 0) lcd.print("Drum"); - else - lcd.print("Inst"); } else { lcd.setCursor(4, 1); lcd.print(" "); @@ -3979,12 +3975,16 @@ void UI_func_seq_display_style(uint8_t param) lcd.print(" "); lcd.setCursor(10, 1); lcd.print("["); - if (seq_content_type[seq_active_track] == 0) - lcd.print("Drum"); - else - lcd.print("Inst"); + lcd.setCursor(15, 1); lcd.print("]"); } + lcd.setCursor(11, 1); + if (seq_content_type[seq_active_track] == 0) + lcd.print("Drum"); + else if (seq_content_type[seq_active_track] == 1) + lcd.print("Inst"); + else + lcd.print("Chrd"); } if (LCDML.FUNC_close()) // ****** STABLE END ********* { @@ -4152,7 +4152,7 @@ void UI_func_seq_vel_editor(uint8_t param) else if (LCDML.BT_checkUp()) seq_vel[seq_active_track][seq_menu - 1] = constrain(seq_vel[seq_active_track][seq_menu - 1] - 1, 0, 127); } - } else if (seq_active_function == 1 && seq_content_type[seq_active_track] > 1 ) { + } else if (seq_active_function == 1 && seq_content_type[seq_active_track] > 1 ) { //is in Chord or Arp Mode if ((LCDML.BT_checkDown() && encoderDir[ENC_R].Down()) || (LCDML.BT_checkUp() && encoderDir[ENC_R].Up())) { if (LCDML.BT_checkDown()) @@ -4179,8 +4179,8 @@ void UI_func_seq_vel_editor(uint8_t param) } //button check end <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - if ( seq_content_type[seq_active_track] > 1 && seq_vel[seq_active_track][seq_menu - 1]<200) seq_vel[seq_active_track][seq_menu - 1]=200; - + if ( seq_content_type[seq_active_track] > 1 && seq_vel[seq_active_track][seq_menu - 1] < 200) seq_vel[seq_active_track][seq_menu - 1] = 200; + if (seq_menu == 0) { lcd.setCursor(4, 0); lcd.print("--- --- "); @@ -4232,7 +4232,7 @@ void UI_func_seq_vel_editor(uint8_t param) lcd.print(" "); } else { - if (seq_vel[seq_active_track][seq_menu - 1] == 200) lcd.print("Maj" ); + if (seq_vel[seq_active_track][seq_menu - 1] == 200) lcd.print("Maj" ); else if (seq_vel[seq_active_track][seq_menu - 1] == 201) lcd.print("Min" ); else if (seq_vel[seq_active_track][seq_menu - 1] == 202) lcd.print("Sev" ); else if (seq_vel[seq_active_track][seq_menu - 1] == 203) lcd.print("Aug" ); @@ -4283,6 +4283,21 @@ void seq_refresh_display_play_status() } } +void arp_refresh_display_play_status() +{ + lcd.setCursor(12, 0); + if (seq_running == false ) + { + lcd.print("PLY"); + } else if (seq_running == true ) + { + seq_note_in = 0; + lcd.print("STP"); + } +} + + + void UI_func_sequencer(uint8_t param) { if (LCDML.FUNC_setup()) // ****** SETUP ********* @@ -4759,9 +4774,173 @@ void UI_func_sequencer(uint8_t param) } } -void UI_func_seq_pat_chain(uint8_t param) +void UI_func_arpeggio(uint8_t param) { + if (LCDML.FUNC_setup()) // ****** SETUP ********* + { + encoderDir[ENC_R].reset(); + seq_temp_active_menu = 0; + lcd.setCursor( 0, 0); + lcd.print("Oct"); + lcd.setCursor( 0, 1); + lcd.print("Style"); + lcd.setCursor( 7, 0); + lcd.print("Maj"); + lcd.setCursor( 11, 1); + lcd.print("1/16"); + + arp_refresh_display_play_status(); + } + if (LCDML.FUNC_loop()) // ****** LOOP ********* + { + if ((LCDML.BT_checkDown() && encoderDir[ENC_R].Down()) || (LCDML.BT_checkUp() && encoderDir[ENC_R].Up()) || (LCDML.BT_checkEnter() && encoderDir[ENC_R].ButtonShort())) + { + if (seq_temp_active_menu == 0) + { + if (LCDML.BT_checkDown()) + seq_temp_select_menu = constrain(seq_temp_select_menu + ENCODER[ENC_R].speed(), 0, 3); + else if (LCDML.BT_checkUp()) + seq_temp_select_menu = constrain(seq_temp_select_menu - ENCODER[ENC_R].speed(), 0, 3); + } else if (seq_temp_active_menu == 1) // Octave setting + { + if (LCDML.BT_checkDown()) + arp_oct_usersetting = constrain(arp_oct_usersetting + ENCODER[ENC_R].speed(), 0, 3); + else if (LCDML.BT_checkUp()) + arp_oct_usersetting = constrain(arp_oct_usersetting - ENCODER[ENC_R].speed(), 0, 3); + } + else if (seq_temp_active_menu == 2) // Style setting + { + if (LCDML.BT_checkDown()) + arp_style = constrain(arp_style + ENCODER[ENC_R].speed(), 0, 3); + else if (LCDML.BT_checkUp()) + arp_style = constrain(arp_style - ENCODER[ENC_R].speed(), 0, 3); + } + else if (seq_temp_active_menu == 3) // Arp Speed setting + { + if (LCDML.BT_checkDown()) + arp_speed = constrain(arp_speed + ENCODER[ENC_R].speed(), 0, 1); + else if (LCDML.BT_checkUp()) + arp_speed = constrain(arp_speed - ENCODER[ENC_R].speed(), 0, 1); + } + if (LCDML.BT_checkEnter()) //handle button presses during menu >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> + { + if ( seq_temp_select_menu == 0 && seq_temp_active_menu == 0 ) + { + seq_temp_active_menu = 1; + } + else if ( seq_temp_select_menu == 0 && seq_temp_active_menu == 1 ) + { + seq_temp_active_menu = 0; + } + if ( seq_temp_select_menu == 1 && seq_temp_active_menu == 0 ) + { + seq_temp_active_menu = 2; + } + else if ( seq_temp_select_menu == 1 && seq_temp_active_menu == 2 ) + { + seq_temp_active_menu = 0; + } + + else if ( seq_temp_select_menu == 2 && seq_temp_active_menu == 0 ) + { + seq_running = !seq_running; + arp_refresh_display_play_status(); + MicroDexed[0]->panic(); + seq_step = 0; + arp_octave = 0; + arp_step = 0; + seq_chain_active_step = 0; + } + else if ( seq_temp_select_menu == 3 && seq_temp_active_menu == 0 ) + { + seq_temp_active_menu = 3; + } + else if ( seq_temp_select_menu == 3 && seq_temp_active_menu == 3 ) + { + seq_temp_active_menu = 0; + } + } + } + lcd.setCursor( 4, 0); + lcd.print(arp_oct_usersetting); + lcd.setCursor( 6, 1); + lcd.print( arp_style_names[arp_style][0] ); + lcd.print( arp_style_names[arp_style][1] ); + lcd.print( arp_style_names[arp_style][2] ); + lcd.setCursor( 11, 1); + if (arp_speed == 0)lcd.print("1/16"); else if (arp_speed == 1)lcd.print("1/8 "); + + if (seq_temp_select_menu == 0) { + lcd.setCursor( 11, 0); + lcd.print(" "); + lcd.setCursor( 15, 0); + lcd.print(" "); + lcd.setCursor( 5, 1); + lcd.print(" "); + lcd.setCursor( 9, 1); + lcd.print(" "); + lcd.setCursor( 3, 0); + lcd.print("["); + lcd.setCursor( 5, 0); + lcd.print("]"); + lcd.setCursor( 10, 1); + lcd.print(" "); + lcd.setCursor( 15, 1); + lcd.print(" "); + } + else if (seq_temp_select_menu == 1) + { + lcd.setCursor( 11, 0); + lcd.print(" "); + lcd.print(" "); + lcd.setCursor( 3, 0); + lcd.print(" "); + lcd.setCursor( 5, 0); + lcd.print(" "); + lcd.setCursor( 5, 1); + lcd.print("["); + lcd.setCursor( 9, 1); + lcd.print("]"); + } + else if (seq_temp_select_menu == 2) + { + lcd.setCursor( 5, 1); + lcd.print(" "); + lcd.setCursor( 9, 1); + lcd.print(" "); + lcd.setCursor( 11, 0); + lcd.print("["); + lcd.setCursor( 15, 0); + lcd.print("]"); + lcd.setCursor( 10, 1); + lcd.print(" "); + lcd.setCursor( 15, 1); + lcd.print(" "); + } + else if (seq_temp_select_menu == 3) + { + lcd.setCursor( 11, 0); + lcd.print(" "); + lcd.setCursor( 15, 0); + lcd.print(" "); + lcd.setCursor( 10, 1); + lcd.print("["); + lcd.setCursor( 15, 1); + lcd.print("]"); + lcd.setCursor( 3, 0); + lcd.print(" "); + lcd.setCursor( 5, 0); + lcd.print(" "); + } + } + if (LCDML.FUNC_close()) // ****** STABLE END ********* + { + encoderDir[ENC_R].reset(); + } +} +void UI_func_seq_pat_chain(uint8_t param) +{ if (LCDML.FUNC_setup()) // ****** SETUP ********* { // setup function @@ -4793,7 +4972,6 @@ void UI_func_seq_pat_chain(uint8_t param) lcd.setCursor(8 , 1); lcd.print( seq_patternchain[seq_chain_active_chainstep][3]); } - if (LCDML.FUNC_loop()) // ****** LOOP ********* { if (seq_temp_active_menu == 99) { @@ -4951,7 +5129,6 @@ void UI_func_seq_pat_chain(uint8_t param) void UI_func_seq_track_setup(uint8_t param) { - if (LCDML.FUNC_setup()) // ****** SETUP ********* { // setup function @@ -4965,13 +5142,13 @@ void UI_func_seq_track_setup(uint8_t param) lcd.setCursor(9 , 1); lcd.print("T4"); lcd.setCursor(3 , 0); - if (seq_track_type[0] == 0 ) lcd.print("Drm"); else lcd.print("Ins"); + if (seq_track_type[0] == 0 ) lcd.print("Drm"); else if (seq_track_type[0] == 1 ) lcd.print("Ins"); else if (seq_track_type[0] == 2 )lcd.print("Chd"); else lcd.print("Arp"); lcd.setCursor(3 , 1); - if (seq_track_type[1] == 0 ) lcd.print("Drm"); else lcd.print("Ins"); + if (seq_track_type[1] == 0 ) lcd.print("Drm"); else if (seq_track_type[1] == 1 ) lcd.print("Ins"); else if (seq_track_type[1] == 2 )lcd.print("Chd"); else lcd.print("Arp"); lcd.setCursor(12 , 0); - if (seq_track_type[2] == 0 ) lcd.print("Drm"); else lcd.print("Ins"); + if (seq_track_type[2] == 0 ) lcd.print("Drm"); else if (seq_track_type[2] == 1 ) lcd.print("Ins"); else if (seq_track_type[2] == 2 )lcd.print("Chd"); else lcd.print("Arp"); lcd.setCursor(12 , 1); - if (seq_track_type[3] == 0 ) lcd.print("Drm"); else lcd.print("Ins"); + if (seq_track_type[3] == 0 ) lcd.print("Drm"); else if (seq_track_type[3] == 1 ) lcd.print("Ins"); else if (seq_track_type[3] == 2 )lcd.print("Chd"); else lcd.print("Arp"); } if (LCDML.FUNC_loop()) // ****** LOOP ********* { @@ -4987,9 +5164,9 @@ void UI_func_seq_track_setup(uint8_t param) if ((LCDML.BT_checkDown() && encoderDir[ENC_R].Down()) || (LCDML.BT_checkUp() && encoderDir[ENC_R].Up())) { if (LCDML.BT_checkDown()) - seq_track_type[seq_temp_active_menu] = constrain(seq_track_type[seq_temp_active_menu] + 1, 0, 1); + seq_track_type[seq_temp_active_menu] = constrain(seq_track_type[seq_temp_active_menu] + 1, 0, 3); else if (LCDML.BT_checkUp()) - seq_track_type[seq_temp_active_menu] = constrain(seq_track_type[seq_temp_active_menu] - 1, 0, 1); + seq_track_type[seq_temp_active_menu] = constrain(seq_track_type[seq_temp_active_menu] - 1, 0, 3); } } if (LCDML.BT_checkEnter()) //handle button presses during menu >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -5012,7 +5189,7 @@ void UI_func_seq_track_setup(uint8_t param) lcd.setCursor(6 , 1); lcd.print(" "); lcd.setCursor(3 , 0); - if (seq_track_type[0] == 0 ) lcd.print("Drm"); else lcd.print("Ins"); + if (seq_track_type[0] == 0 ) lcd.print("Drm"); else if (seq_track_type[0] == 1 ) lcd.print("Ins"); else if (seq_track_type[0] == 2 )lcd.print("Chd"); else lcd.print("Arp"); } else if (seq_temp_select_menu == 1) { lcd.setCursor(2 , 0); @@ -5028,7 +5205,7 @@ void UI_func_seq_track_setup(uint8_t param) lcd.setCursor(15 , 0); lcd.print(" "); lcd.setCursor(3 , 1); - if (seq_track_type[1] == 0 ) lcd.print("Drm"); else lcd.print("Ins"); + if (seq_track_type[1] == 0 ) lcd.print("Drm"); else if (seq_track_type[1] == 1 ) lcd.print("Ins"); else if (seq_track_type[1] == 2 )lcd.print("Chd"); else lcd.print("Arp"); } else if (seq_temp_select_menu == 2) { lcd.setCursor(2 , 1); @@ -5044,7 +5221,7 @@ void UI_func_seq_track_setup(uint8_t param) lcd.setCursor(15 , 1); lcd.print(" "); lcd.setCursor(12 , 0); - if (seq_track_type[2] == 0 ) lcd.print("Drm"); else lcd.print("Ins"); + if (seq_track_type[2] == 0 ) lcd.print("Drm"); else if (seq_track_type[2] == 1 ) lcd.print("Ins"); else if (seq_track_type[2] == 2 )lcd.print("Chd"); else lcd.print("Arp"); } else if (seq_temp_select_menu == 3) { lcd.setCursor(11 , 0); @@ -5056,7 +5233,7 @@ void UI_func_seq_track_setup(uint8_t param) lcd.setCursor(15 , 1); lcd.print("]"); lcd.setCursor(12 , 1); - if (seq_track_type[3] == 0 ) lcd.print("Drm"); else lcd.print("Ins"); + if (seq_track_type[3] == 0 ) lcd.print("Drm"); else if (seq_track_type[3] == 1 ) lcd.print("Ins"); else if (seq_track_type[3] == 2 )lcd.print("Chd"); else lcd.print("Arp"); } } if (LCDML.FUNC_close()) // ****** STABLE END ********* @@ -5065,7 +5242,6 @@ void UI_func_seq_track_setup(uint8_t param) } } - void UI_func_seq_pattern_load(uint8_t param) { static uint8_t mode; @@ -5134,7 +5310,7 @@ void UI_func_seq_pattern_save(uint8_t param) { char tmp[FILENAME_LEN]; yesno = false; - temp_int=0; + temp_int = 0; mode = 0; encoderDir[ENC_R].reset(); lcd.setCursor(0, 0); @@ -7357,7 +7533,7 @@ void UI_func_eq_treble(uint8_t param) } } lcd_display_meter_float("EQ Treble", configuration.fx.eq_treble, 0.1, 0.0, EQ_TREBLE_MIN, EQ_TREBLE_MAX, 1, 1, false, true, true); - sgtl5000_1.eqBand(4,mapfloat(configuration.fx.eq_treble, EQ_TREBLE_MIN, EQ_TREBLE_MAX, -1.0, 1.0)); + sgtl5000_1.eqBand(4, mapfloat(configuration.fx.eq_treble, EQ_TREBLE_MIN, EQ_TREBLE_MAX, -1.0, 1.0)); } if (LCDML.FUNC_close()) // ****** STABLE END *********