|
|
|
@ -209,7 +209,7 @@ const uint8_t meter_bar[5][8] = { |
|
|
|
|
{B00001, B00001, B00001, B00001, B00001, B00001, B00001, B00001} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const uint8_t special_chars[19][8] = { |
|
|
|
|
const uint8_t special_chars[22][8] = { |
|
|
|
|
{B11111, B11011, B10011, B11011, B11011, B11011, B11011, B11111}, // [0] 1 small invers
|
|
|
|
|
{B11111, B11011, B10101, B11101, B11011, B10111, B10001, B11111}, // [1] 2 small invers
|
|
|
|
|
{B11111, B11011, B10011, B11011, B11011, B11011, B11011, B11111}, // [2] 1 OP invers
|
|
|
|
@ -228,7 +228,10 @@ const uint8_t special_chars[19][8] = { |
|
|
|
|
{B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111}, // [15] Level 8
|
|
|
|
|
{B00100, B00110, B00101, B00101, B01101, B11101, B11100, B11000}, // [16] Note
|
|
|
|
|
{B01110, B10001, B10001, B01110, B00100, B00100, B00110, B00110}, // [17] Disabled 2nd instance symbol
|
|
|
|
|
{B11111, B10001, B10111, B10001, B10111, B10111, B10111, B11111} // [18] Favorites Icon
|
|
|
|
|
{B11111, B10001, B10111, B10001, B10111, B10111, B10111, B11111}, // [18] Favorites Icon
|
|
|
|
|
{B01000, B01100, B01110, B01111, B01110, B01100, B01000, B00000}, // [19] Play Symbol
|
|
|
|
|
{B00000, B01110, B11111, B11111, B11111, B01110, B00000, B00000}, // [20] Record Symbol
|
|
|
|
|
{B00000, B00000, B01110, B01110, B01110, B00000, B00000, B00000} // [21] Stop Symbol
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
enum { SCROLLBAR, BLOCKBAR, METERBAR }; |
|
|
|
@ -288,7 +291,7 @@ void UI_func_portamento_glissando(uint8_t param); |
|
|
|
|
void UI_func_portamento_time(uint8_t param); |
|
|
|
|
void UI_handle_OP(uint8_t param); |
|
|
|
|
void UI_func_information(uint8_t param); |
|
|
|
|
void UI_func_sequencer(uint8_t param); |
|
|
|
|
void UI_func_seq_pattern_editor(uint8_t param); |
|
|
|
|
void UI_func_seq_vel_editor(uint8_t param); |
|
|
|
|
void UI_func_seq_live_transpose_oct(uint8_t param); |
|
|
|
|
void UI_func_arp_shift(uint8_t param); |
|
|
|
@ -3613,6 +3616,7 @@ void UI_func_drum_reverb_send(uint8_t param) |
|
|
|
|
if (LCDML.FUNC_setup()) // ****** SETUP *********
|
|
|
|
|
{ |
|
|
|
|
encoderDir[ENC_R].reset(); |
|
|
|
|
temp_int = (int)(drum_config[activesample].reverb_send * 100); |
|
|
|
|
lcd.setCursor(0, 0); |
|
|
|
|
lcd.print("Drum Rev. Send"); |
|
|
|
|
lcd.setCursor(1, 1); |
|
|
|
@ -3769,6 +3773,7 @@ void UI_func_drum_volume(uint8_t param) |
|
|
|
|
if (LCDML.FUNC_setup()) // ****** SETUP *********
|
|
|
|
|
{ |
|
|
|
|
encoderDir[ENC_R].reset(); |
|
|
|
|
temp_int = (int)(drum_config[activesample].vol_max * 100); |
|
|
|
|
lcd.setCursor(0, 0); |
|
|
|
|
lcd.print("DrumSmp. Volume"); |
|
|
|
|
lcd.setCursor(1, 1); |
|
|
|
@ -3940,6 +3945,7 @@ void UI_func_drum_pan(uint8_t param) |
|
|
|
|
if (LCDML.FUNC_setup()) // ****** SETUP *********
|
|
|
|
|
{ |
|
|
|
|
encoderDir[ENC_R].reset(); |
|
|
|
|
temp_int = mapfloat(drum_config[activesample].pan, -1.0, 1.0, -99, 99); |
|
|
|
|
lcd.setCursor(0, 0); |
|
|
|
|
lcd.print("DrmSmp. Panorama"); |
|
|
|
|
lcd.setCursor(1, 1); |
|
|
|
@ -3980,7 +3986,6 @@ void UI_func_drum_pan(uint8_t param) |
|
|
|
|
menu_select_toggle = false; |
|
|
|
|
} else |
|
|
|
|
{ menu_select_toggle = true; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (menu_select_toggle == false) { |
|
|
|
@ -4080,6 +4085,33 @@ void seq_printAllSeqSteps() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#ifdef TESTDISPLAY20x4 |
|
|
|
|
void seq_printVelGraphBar() |
|
|
|
|
{ |
|
|
|
|
lcd.setCursor(0, 2); |
|
|
|
|
for (uint8_t i = 0; i < 16; i++) |
|
|
|
|
{ |
|
|
|
|
if (seq_vel[seq_active_track][i] == 0) |
|
|
|
|
lcd.print(" "); |
|
|
|
|
else if (seq_vel[seq_active_track][i] > 0 && seq_vel[seq_active_track][i] <= 20) |
|
|
|
|
lcd.write(1); |
|
|
|
|
else if (seq_vel[seq_active_track][i] > 21 && seq_vel[seq_active_track][i] <= 40) |
|
|
|
|
lcd.write(2); |
|
|
|
|
else if (seq_vel[seq_active_track][i] > 41 && seq_vel[seq_active_track][i] <= 60) |
|
|
|
|
lcd.write(3); |
|
|
|
|
else if (seq_vel[seq_active_track][i] > 61 && seq_vel[seq_active_track][i] <= 80) |
|
|
|
|
lcd.write(4); |
|
|
|
|
else if (seq_vel[seq_active_track][i] > 81 && seq_vel[seq_active_track][i] <= 90) |
|
|
|
|
lcd.write(5); |
|
|
|
|
else if (seq_vel[seq_active_track][i] > 91 && seq_vel[seq_active_track][i] <= 105) |
|
|
|
|
lcd.write(6); |
|
|
|
|
else if (seq_vel[seq_active_track][i] > 105 && seq_vel[seq_active_track][i] <= 128) |
|
|
|
|
lcd.write(7); |
|
|
|
|
else |
|
|
|
|
lcd.print("C"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
// deactivated for now since audio library seems not like to change reverb settings at runtime (and is skipping notes)
|
|
|
|
|
//void seq_set_rev_for_single_instr_per_step(uint8_t track, uint8_t note)
|
|
|
|
|
//{
|
|
|
|
@ -4403,6 +4435,13 @@ void UI_func_seq_vel_editor(uint8_t param) |
|
|
|
|
|
|
|
|
|
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 && seq_content_type[seq_active_track] < 2) { |
|
|
|
|
lcd.setCursor(0, 0); |
|
|
|
|
lcd.print("Vel:"); |
|
|
|
|
sprintf(tmp, "%03d", seq_vel[seq_active_track][seq_menu - 1]); |
|
|
|
|
lcd.setCursor(4, 0); |
|
|
|
|
lcd.print(tmp); |
|
|
|
|
} |
|
|
|
|
if (seq_menu == 0) { |
|
|
|
|
lcd.setCursor(4, 0); |
|
|
|
|
lcd.print("--- --- "); |
|
|
|
@ -4418,7 +4457,7 @@ void UI_func_seq_vel_editor(uint8_t param) |
|
|
|
|
lcd.setCursor(15, 0); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
lcd.setCursor(0, 1); |
|
|
|
|
lcd.print("x"); |
|
|
|
|
lcd.write(219); // cursor symbol
|
|
|
|
|
lcd.setCursor(1, 1); |
|
|
|
|
lcd.print(seq_find_shortname(1)[0] ); |
|
|
|
|
sprintf(tmp, "%03d", seq_vel[seq_active_track][seq_menu - 1]); |
|
|
|
@ -4426,45 +4465,41 @@ void UI_func_seq_vel_editor(uint8_t param) |
|
|
|
|
lcd.print(tmp); |
|
|
|
|
} else if (seq_menu > 1) { |
|
|
|
|
lcd.setCursor(seq_menu - 1, 1); |
|
|
|
|
lcd.print("x"); |
|
|
|
|
lcd.write(219); // cursor symbol
|
|
|
|
|
lcd.setCursor(seq_menu - 2, 1); |
|
|
|
|
lcd.print(seq_find_shortname(seq_menu - 2)[0] ); |
|
|
|
|
lcd.setCursor(seq_menu , 1); |
|
|
|
|
lcd.print(seq_find_shortname(seq_menu)[0] ); |
|
|
|
|
sprintf(tmp, "%03d", seq_vel[seq_active_track][seq_menu - 1]); |
|
|
|
|
lcd.setCursor(4, 0); |
|
|
|
|
lcd.print(tmp); |
|
|
|
|
//sprintf(tmp, "%03d", seq_vel[seq_active_track][seq_menu - 1]);
|
|
|
|
|
} |
|
|
|
|
if (seq_menu > 0) { |
|
|
|
|
lcd.setCursor(8, 0); |
|
|
|
|
lcd.setCursor(4, 0); |
|
|
|
|
if (seq_data[seq_active_track][seq_menu - 1] > 0) { |
|
|
|
|
|
|
|
|
|
if (seq_content_type[seq_active_track] == 0) //is Drumtrack
|
|
|
|
|
{ |
|
|
|
|
lcd.show(0, 8, 5, seq_find_drum_name_from_note( seq_data[seq_active_track][seq_menu - 1]) ); |
|
|
|
|
} else |
|
|
|
|
{ |
|
|
|
|
if (seq_content_type[seq_active_track] < 2) |
|
|
|
|
{ |
|
|
|
|
lcd.print(noteNames[seq_data[seq_active_track][seq_menu - 1] % 12 ][0] ); |
|
|
|
|
if (noteNames[seq_data[seq_active_track][seq_menu - 1] % 12 ][1] != '\0' ) { |
|
|
|
|
lcd.print(noteNames[seq_data[seq_active_track][seq_menu - 1] % 12 ][1] ); |
|
|
|
|
} |
|
|
|
|
lcd.print( (seq_data[seq_active_track][seq_menu - 1] / 12) - 1); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
{ lcd.setCursor(0, 0); |
|
|
|
|
lcd.print(noteNames[seq_data[seq_active_track][seq_menu - 1] % 12 ][0] ); |
|
|
|
|
if (noteNames[seq_data[seq_active_track][seq_menu - 1] % 12 ][1] != '\0' ) { |
|
|
|
|
lcd.print(noteNames[seq_data[seq_active_track][seq_menu - 1] % 12 ][1] ); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
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" ); |
|
|
|
|
else if (seq_vel[seq_active_track][seq_menu - 1] == 204) lcd.print("Dim" ); |
|
|
|
|
else if (seq_vel[seq_active_track][seq_menu - 1] == 205) lcd.print("Mj7" ); |
|
|
|
|
lcd.print( (seq_data[seq_active_track][seq_menu - 1] / 12) - 1); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
if (seq_content_type[seq_active_track] > 1) { |
|
|
|
|
lcd.setCursor(3, 0); |
|
|
|
|
if (seq_vel[seq_active_track][seq_menu - 1] == 200) lcd.print("Major" ); |
|
|
|
|
else if (seq_vel[seq_active_track][seq_menu - 1] == 201) lcd.print("Minor" ); |
|
|
|
|
else if (seq_vel[seq_active_track][seq_menu - 1] == 202) lcd.print("Seven" ); |
|
|
|
|
else if (seq_vel[seq_active_track][seq_menu - 1] == 203) lcd.print("Aug " ); |
|
|
|
|
else if (seq_vel[seq_active_track][seq_menu - 1] == 204) lcd.print("Dim " ); |
|
|
|
|
else if (seq_vel[seq_active_track][seq_menu - 1] == 205) lcd.print("Maj7 " ); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
lcd.print(" "); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (LCDML.FUNC_close()) // ****** STABLE END *********
|
|
|
|
@ -4489,38 +4524,69 @@ void seq_clear_all_patterns() |
|
|
|
|
|
|
|
|
|
void seq_refresh_display_play_status() |
|
|
|
|
{ |
|
|
|
|
lcd.setCursor(9, 0); |
|
|
|
|
if (seq_running == false && seq_recording == false) |
|
|
|
|
{ |
|
|
|
|
lcd.print("PLY"); |
|
|
|
|
lcd.createChar(0, (uint8_t*)special_chars[19]); //play symbol
|
|
|
|
|
#ifdef TESTDISPLAY20x4 |
|
|
|
|
lcd.setCursor(15, 0); |
|
|
|
|
#else |
|
|
|
|
lcd.setCursor(11, 0); |
|
|
|
|
#endif |
|
|
|
|
lcd.write(0); |
|
|
|
|
} else if (seq_running == true && seq_recording == false) |
|
|
|
|
{ |
|
|
|
|
seq_note_in = 0; |
|
|
|
|
lcd.print("REC"); |
|
|
|
|
lcd.createChar(0, (uint8_t*)special_chars[20]); //record symbol
|
|
|
|
|
#ifdef TESTDISPLAY20x4 |
|
|
|
|
lcd.setCursor(15, 0); |
|
|
|
|
#else |
|
|
|
|
lcd.setCursor(11, 0); |
|
|
|
|
#endif |
|
|
|
|
lcd.write(0); |
|
|
|
|
} else if (seq_running == true && seq_recording == true) |
|
|
|
|
{ |
|
|
|
|
seq_note_in = 0; |
|
|
|
|
lcd.print("STP"); |
|
|
|
|
lcd.createChar(0, (uint8_t*)special_chars[21]); //stop symbol
|
|
|
|
|
#ifdef TESTDISPLAY20x4 |
|
|
|
|
lcd.setCursor(15, 0); |
|
|
|
|
#else |
|
|
|
|
lcd.setCursor(11, 0); |
|
|
|
|
#endif |
|
|
|
|
lcd.write(0); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void arp_refresh_display_play_status() |
|
|
|
|
{ |
|
|
|
|
lcd.setCursor(12, 0); |
|
|
|
|
if (seq_running == false ) |
|
|
|
|
{ |
|
|
|
|
lcd.print("PLY"); |
|
|
|
|
lcd.createChar(0, (uint8_t*)special_chars[19]); //play symbol
|
|
|
|
|
lcd.setCursor(14, 0); |
|
|
|
|
lcd.write(0); |
|
|
|
|
} else if (seq_running == true ) |
|
|
|
|
{ |
|
|
|
|
seq_note_in = 0; |
|
|
|
|
lcd.print("STP"); |
|
|
|
|
lcd.createChar(0, (uint8_t*)special_chars[21]); //stop symbol
|
|
|
|
|
lcd.setCursor(14, 0); |
|
|
|
|
lcd.write(0); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void UI_func_sequencer(uint8_t param) |
|
|
|
|
void UI_func_seq_pattern_editor(uint8_t param) |
|
|
|
|
{ |
|
|
|
|
if (LCDML.FUNC_setup()) // ****** SETUP *********
|
|
|
|
|
{ |
|
|
|
|
lcd.createChar(0, (uint8_t*)special_chars[19]); //play symbol + record symbol switching
|
|
|
|
|
|
|
|
|
|
#ifdef TESTDISPLAY20x4 |
|
|
|
|
lcd.createChar(1, (uint8_t*)special_chars[9]); //bar graph
|
|
|
|
|
lcd.createChar(2, (uint8_t*)special_chars[10]); //bar graph
|
|
|
|
|
lcd.createChar(3, (uint8_t*)special_chars[11]); //bar graph
|
|
|
|
|
lcd.createChar(4, (uint8_t*)special_chars[12]); //bar graph
|
|
|
|
|
lcd.createChar(5, (uint8_t*)special_chars[13]); //bar graph
|
|
|
|
|
lcd.createChar(6, (uint8_t*)special_chars[14]); //bar graph
|
|
|
|
|
lcd.createChar(7, (uint8_t*)special_chars[15]); //bar graph
|
|
|
|
|
#endif |
|
|
|
|
temp_int = seq_data[seq_active_track][0]; |
|
|
|
|
encoderDir[ENC_R].reset(); |
|
|
|
|
seq_note_in = 0; |
|
|
|
@ -4528,9 +4594,16 @@ void UI_func_sequencer(uint8_t param) |
|
|
|
|
lcd.setCursor(1, 0); |
|
|
|
|
lcd.show(0, 1, 6, basename(drum_config[activesample].name)); |
|
|
|
|
seq_refresh_display_play_status(); |
|
|
|
|
#ifdef TESTDISPLAY20x4 |
|
|
|
|
lcd.setCursor(18, 0); |
|
|
|
|
#else |
|
|
|
|
lcd.setCursor(14, 0); |
|
|
|
|
#endif |
|
|
|
|
lcd.print(seq_active_track); |
|
|
|
|
seq_printAllSeqSteps(); |
|
|
|
|
#ifdef TESTDISPLAY20x4 |
|
|
|
|
seq_printVelGraphBar(); |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
if (LCDML.FUNC_loop()) // ****** LOOP *********
|
|
|
|
|
{ if (seq_menu == 33 ) { // is in sub-function - fill pattern
|
|
|
|
@ -4538,98 +4611,92 @@ void UI_func_sequencer(uint8_t param) |
|
|
|
|
if ((LCDML.BT_checkDown() && encoderDir[ENC_R].Down()) || (LCDML.BT_checkUp() && encoderDir[ENC_R].Up())) |
|
|
|
|
{ |
|
|
|
|
if (LCDML.BT_checkDown()) { |
|
|
|
|
|
|
|
|
|
seq_temp_active_menu = constrain(seq_temp_active_menu + 1, 0, 3); |
|
|
|
|
} |
|
|
|
|
else if (LCDML.BT_checkUp()) { |
|
|
|
|
seq_temp_active_menu = constrain(seq_temp_active_menu - 1, 0, 3); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else |
|
|
|
|
|
|
|
|
|
if (seq_menu == 32 ) { // is in sub-function - fill pattern
|
|
|
|
|
seq_active_function = 97; |
|
|
|
|
|
|
|
|
|
if (seq_content_type[seq_active_track] == 0) { |
|
|
|
|
if ((LCDML.BT_checkDown() && encoderDir[ENC_R].Down()) || (LCDML.BT_checkUp() && encoderDir[ENC_R].Up())) |
|
|
|
|
{ |
|
|
|
|
if (LCDML.BT_checkDown()) { |
|
|
|
|
|
|
|
|
|
seq_temp_select_menu = constrain(seq_temp_select_menu + 1, 0, NUM_DRUMSET_CONFIG - 1); |
|
|
|
|
} |
|
|
|
|
else if (LCDML.BT_checkUp()) { |
|
|
|
|
seq_temp_select_menu = constrain(seq_temp_select_menu - 1, 0, NUM_DRUMSET_CONFIG - 1); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else |
|
|
|
|
{ |
|
|
|
|
if ((LCDML.BT_checkDown() && encoderDir[ENC_R].Down()) || (LCDML.BT_checkUp() && encoderDir[ENC_R].Up())) |
|
|
|
|
{ |
|
|
|
|
if (LCDML.BT_checkDown()) |
|
|
|
|
seq_temp_select_menu = constrain(seq_temp_select_menu + 1, 0, 108 ); |
|
|
|
|
else if (LCDML.BT_checkUp()) |
|
|
|
|
seq_temp_select_menu = constrain(seq_temp_select_menu - 1, 0, 108 ); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} else if (seq_menu == 30 || seq_menu == 31 ) { // is in sub-function - swap pattern or copy pattern
|
|
|
|
|
seq_active_function = 98; |
|
|
|
|
} else if (seq_menu == 32 ) { // is in sub-function - fill pattern
|
|
|
|
|
seq_active_function = 97; |
|
|
|
|
if (seq_content_type[seq_active_track] == 0) { |
|
|
|
|
if ((LCDML.BT_checkDown() && encoderDir[ENC_R].Down()) || (LCDML.BT_checkUp() && encoderDir[ENC_R].Up())) |
|
|
|
|
{ |
|
|
|
|
if (LCDML.BT_checkDown()) { |
|
|
|
|
|
|
|
|
|
temp_int = constrain(temp_int + 1, 0, 9); |
|
|
|
|
if (temp_int == seq_active_track)temp_int++; |
|
|
|
|
if (temp_int > 9)temp_int = 0; |
|
|
|
|
seq_temp_select_menu = constrain(seq_temp_select_menu + 1, 0, NUM_DRUMSET_CONFIG - 1); |
|
|
|
|
} |
|
|
|
|
else if (LCDML.BT_checkUp()) { |
|
|
|
|
temp_int = constrain(temp_int - 1, 0, 9); |
|
|
|
|
if (temp_int == seq_active_track)temp_int--; |
|
|
|
|
if (temp_int < 0)temp_int = 9; |
|
|
|
|
seq_temp_select_menu = constrain(seq_temp_select_menu - 1, 0, NUM_DRUMSET_CONFIG - 1); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else if (seq_active_function == 99) |
|
|
|
|
} else |
|
|
|
|
{ |
|
|
|
|
if ((LCDML.BT_checkDown() && encoderDir[ENC_R].Down()) || (LCDML.BT_checkUp() && encoderDir[ENC_R].Up())) |
|
|
|
|
{ |
|
|
|
|
if (LCDML.BT_checkDown()) |
|
|
|
|
seq_menu = constrain(seq_menu + 1, 0, 18); |
|
|
|
|
seq_temp_select_menu = constrain(seq_temp_select_menu + 1, 0, 108 ); |
|
|
|
|
else if (LCDML.BT_checkUp()) |
|
|
|
|
seq_menu = constrain(seq_menu - 1, 0, 18); |
|
|
|
|
seq_temp_select_menu = constrain(seq_temp_select_menu - 1, 0, 108 ); |
|
|
|
|
} |
|
|
|
|
} else if (seq_active_function == 0 ) { |
|
|
|
|
if (seq_content_type[seq_active_track] == 0) // is in Drumedit mode
|
|
|
|
|
{ |
|
|
|
|
if ((LCDML.BT_checkDown() && encoderDir[ENC_R].Down()) || (LCDML.BT_checkUp() && encoderDir[ENC_R].Up())) |
|
|
|
|
{ |
|
|
|
|
if (LCDML.BT_checkDown()) |
|
|
|
|
activesample = constrain(activesample + 1, 0, NUM_DRUMSET_CONFIG + 4 ); |
|
|
|
|
else if (LCDML.BT_checkUp()) |
|
|
|
|
activesample = constrain(activesample - 1, 0, NUM_DRUMSET_CONFIG + 4 ); |
|
|
|
|
} |
|
|
|
|
} else //is in Instrument Mode
|
|
|
|
|
} |
|
|
|
|
} else if (seq_menu == 30 || seq_menu == 31 ) { // is in sub-function - swap pattern or copy pattern
|
|
|
|
|
seq_active_function = 98; |
|
|
|
|
if ((LCDML.BT_checkDown() && encoderDir[ENC_R].Down()) || (LCDML.BT_checkUp() && encoderDir[ENC_R].Up())) |
|
|
|
|
{ |
|
|
|
|
if (LCDML.BT_checkDown()) { |
|
|
|
|
|
|
|
|
|
temp_int = constrain(temp_int + 1, 0, 9); |
|
|
|
|
if (temp_int == seq_active_track)temp_int++; |
|
|
|
|
if (temp_int > 9)temp_int = 0; |
|
|
|
|
} |
|
|
|
|
else if (LCDML.BT_checkUp()) { |
|
|
|
|
temp_int = constrain(temp_int - 1, 0, 9); |
|
|
|
|
if (temp_int == seq_active_track)temp_int--; |
|
|
|
|
if (temp_int < 0)temp_int = 9; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else if (seq_active_function == 99) |
|
|
|
|
{ |
|
|
|
|
if ((LCDML.BT_checkDown() && encoderDir[ENC_R].Down()) || (LCDML.BT_checkUp() && encoderDir[ENC_R].Up())) |
|
|
|
|
{ |
|
|
|
|
if (LCDML.BT_checkDown()) |
|
|
|
|
seq_menu = constrain(seq_menu + 1, 0, 18); |
|
|
|
|
else if (LCDML.BT_checkUp()) |
|
|
|
|
seq_menu = constrain(seq_menu - 1, 0, 18); |
|
|
|
|
} |
|
|
|
|
} else if (seq_active_function == 0 ) { |
|
|
|
|
if (seq_content_type[seq_active_track] == 0) // is in Drumedit mode
|
|
|
|
|
{ |
|
|
|
|
if ((LCDML.BT_checkDown() && encoderDir[ENC_R].Down()) || (LCDML.BT_checkUp() && encoderDir[ENC_R].Up())) |
|
|
|
|
{ |
|
|
|
|
if ((LCDML.BT_checkDown() && encoderDir[ENC_R].Down()) || (LCDML.BT_checkUp() && encoderDir[ENC_R].Up())) |
|
|
|
|
{ |
|
|
|
|
if (LCDML.BT_checkDown()) |
|
|
|
|
temp_int = constrain(temp_int + 1, 0, 114 ); |
|
|
|
|
else if (LCDML.BT_checkUp()) |
|
|
|
|
temp_int = constrain(temp_int - 1, 0, 114 ); |
|
|
|
|
} |
|
|
|
|
if (LCDML.BT_checkDown()) |
|
|
|
|
activesample = constrain(activesample + 1, 0, NUM_DRUMSET_CONFIG + 4 ); |
|
|
|
|
else if (LCDML.BT_checkUp()) |
|
|
|
|
activesample = constrain(activesample - 1, 0, NUM_DRUMSET_CONFIG + 4 ); |
|
|
|
|
} |
|
|
|
|
} else if (seq_active_function == 2) |
|
|
|
|
} else //is in Instrument Mode
|
|
|
|
|
{ |
|
|
|
|
if ((LCDML.BT_checkDown() && encoderDir[ENC_R].Down()) || (LCDML.BT_checkUp() && encoderDir[ENC_R].Up())) |
|
|
|
|
{ |
|
|
|
|
if (LCDML.BT_checkDown()) |
|
|
|
|
seq_active_track = constrain(seq_active_track + 1, 0, 9); |
|
|
|
|
temp_int = constrain(temp_int + 1, 0, 114 ); |
|
|
|
|
else if (LCDML.BT_checkUp()) |
|
|
|
|
seq_active_track = constrain(seq_active_track - 1, 0, 9); |
|
|
|
|
|
|
|
|
|
lcd.setCursor(1, 0); |
|
|
|
|
if (seq_content_type[seq_active_track] == 0) lcd.print("Drum "); else if (seq_content_type[seq_active_track] == 1) lcd.print("Instr "); else if (seq_content_type[seq_active_track] == 2) lcd.print("Chord "); else lcd.print("Arp "); |
|
|
|
|
temp_int = constrain(temp_int - 1, 0, 114 ); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else if (seq_active_function == 2) |
|
|
|
|
{ |
|
|
|
|
if ((LCDML.BT_checkDown() && encoderDir[ENC_R].Down()) || (LCDML.BT_checkUp() && encoderDir[ENC_R].Up())) |
|
|
|
|
{ |
|
|
|
|
if (LCDML.BT_checkDown()) |
|
|
|
|
seq_active_track = constrain(seq_active_track + 1, 0, 9); |
|
|
|
|
else if (LCDML.BT_checkUp()) |
|
|
|
|
seq_active_track = constrain(seq_active_track - 1, 0, 9); |
|
|
|
|
|
|
|
|
|
lcd.setCursor(1, 0); |
|
|
|
|
if (seq_content_type[seq_active_track] == 0) lcd.print("Drum "); else if (seq_content_type[seq_active_track] == 1) lcd.print("Instr "); else if (seq_content_type[seq_active_track] == 2) lcd.print("Chord "); else lcd.print("Arp "); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (LCDML.BT_checkEnter()) //handle button presses during menu >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
|
|
|
{ |
|
|
|
|
if (seq_menu == 32 && seq_active_function == 97) //fill pattern every 1/4, 1/8, 1/16 step with active sample/note step 1
|
|
|
|
@ -4736,18 +4803,16 @@ void UI_func_sequencer(uint8_t param) |
|
|
|
|
} |
|
|
|
|
if ( seq_menu == 1) |
|
|
|
|
{ |
|
|
|
|
lcd.setCursor(9, 0); |
|
|
|
|
//lcd.setCursor(11, 0);
|
|
|
|
|
if (seq_running == false && seq_recording == false) |
|
|
|
|
{ |
|
|
|
|
seq_running = true; |
|
|
|
|
lcd.print("REC"); |
|
|
|
|
timer1.start(); |
|
|
|
|
} else if (seq_running == true && seq_recording == false) |
|
|
|
|
{ |
|
|
|
|
seq_running = true; |
|
|
|
|
seq_recording = true; |
|
|
|
|
seq_note_in = 0; |
|
|
|
|
lcd.print("STP"); |
|
|
|
|
} else if (seq_running == true && seq_recording == true) |
|
|
|
|
{ |
|
|
|
|
seq_running = false; |
|
|
|
@ -4755,7 +4820,6 @@ void UI_func_sequencer(uint8_t param) |
|
|
|
|
seq_note_in = 0; |
|
|
|
|
seq_step = 0; |
|
|
|
|
seq_chain_active_step = 0; |
|
|
|
|
lcd.print("PLY"); |
|
|
|
|
timer1.stop(); |
|
|
|
|
MicroDexed[0]->panic(); |
|
|
|
|
} |
|
|
|
@ -4813,9 +4877,7 @@ void UI_func_sequencer(uint8_t param) |
|
|
|
|
if (seq_temp_active_menu == 0) lcd.print(" 1/4"); |
|
|
|
|
else if (seq_temp_active_menu == 1) lcd.print(" 1/8"); |
|
|
|
|
else if (seq_temp_active_menu == 2) lcd.print("1/16"); |
|
|
|
|
|
|
|
|
|
} else if (seq_menu == 32 ) { //fill pattern
|
|
|
|
|
|
|
|
|
|
if (seq_content_type[seq_active_track] == 0) { //drum
|
|
|
|
|
lcd.setCursor(0, 1); |
|
|
|
|
lcd.print("with"); |
|
|
|
@ -4834,7 +4896,6 @@ void UI_func_sequencer(uint8_t param) |
|
|
|
|
lcd.print("with"); |
|
|
|
|
lcd.setCursor(4, 1); |
|
|
|
|
lcd.print("["); |
|
|
|
|
|
|
|
|
|
lcd.setCursor(5, 1); |
|
|
|
|
lcd.print(noteNames[seq_temp_select_menu % 12 ]); |
|
|
|
|
lcd.print( (seq_temp_select_menu / 12) - 1); |
|
|
|
@ -4846,7 +4907,6 @@ void UI_func_sequencer(uint8_t param) |
|
|
|
|
else if (seq_temp_active_menu == 1) lcd.print(" 1/8"); |
|
|
|
|
else if (seq_temp_active_menu == 2) lcd.print("1/16"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} else if (seq_menu == 31) { //copy pattern
|
|
|
|
|
lcd.setCursor(13, 0); |
|
|
|
|
lcd.print("["); |
|
|
|
@ -4866,10 +4926,17 @@ void UI_func_sequencer(uint8_t param) |
|
|
|
|
lcd.setCursor(14, 1); |
|
|
|
|
lcd.print(temp_int); |
|
|
|
|
} else if (seq_menu == 0) { |
|
|
|
|
lcd.setCursor(8, 0); |
|
|
|
|
#ifdef TESTDISPLAY20x4 |
|
|
|
|
lcd.setCursor(14, 0); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
lcd.setCursor(16, 0); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
#else |
|
|
|
|
lcd.setCursor(10, 0); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
lcd.setCursor(12, 0); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
#endif |
|
|
|
|
lcd.setCursor(0, 0); |
|
|
|
|
lcd.print("["); |
|
|
|
|
if (seq_content_type[seq_active_track] == 0) //Drum Mode
|
|
|
|
@ -4937,19 +5004,45 @@ void UI_func_sequencer(uint8_t param) |
|
|
|
|
lcd.print(" "); |
|
|
|
|
lcd.setCursor(7, 0); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
#ifdef TESTDISPLAY20x4 |
|
|
|
|
lcd.setCursor(17, 0); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
lcd.setCursor(19, 0); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
#else |
|
|
|
|
lcd.setCursor(13, 0); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
lcd.setCursor(15, 0); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
lcd.setCursor(8, 0); |
|
|
|
|
#endif |
|
|
|
|
#ifdef TESTDISPLAY20x4 |
|
|
|
|
lcd.setCursor(14, 0); |
|
|
|
|
lcd.print("["); |
|
|
|
|
seq_refresh_display_play_status(); |
|
|
|
|
lcd.setCursor(16, 0); |
|
|
|
|
lcd.print("]"); |
|
|
|
|
#else |
|
|
|
|
lcd.setCursor(10, 0); |
|
|
|
|
lcd.print("["); |
|
|
|
|
lcd.setCursor(9, 0); |
|
|
|
|
seq_refresh_display_play_status(); |
|
|
|
|
lcd.setCursor(12, 0); |
|
|
|
|
lcd.print("]"); |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
if (seq_menu == 2) { |
|
|
|
|
lcd.setCursor(8, 0); |
|
|
|
|
#ifdef TESTDISPLAY20x4 |
|
|
|
|
lcd.setCursor(14, 0); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
lcd.setCursor(16, 0); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
lcd.setCursor(17, 0); |
|
|
|
|
lcd.print("["); |
|
|
|
|
lcd.setCursor(18, 0); |
|
|
|
|
lcd.print(seq_active_track); |
|
|
|
|
lcd.setCursor(19, 0); |
|
|
|
|
lcd.print("]"); |
|
|
|
|
#else |
|
|
|
|
lcd.setCursor(10, 0); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
lcd.setCursor(12, 0); |
|
|
|
|
lcd.print(" "); |
|
|
|
@ -4959,26 +5052,40 @@ void UI_func_sequencer(uint8_t param) |
|
|
|
|
lcd.print(seq_active_track); |
|
|
|
|
lcd.setCursor(15, 0); |
|
|
|
|
lcd.print("]"); |
|
|
|
|
#endif |
|
|
|
|
lcd.setCursor(0, 1); |
|
|
|
|
seq_printAllSeqSteps(); |
|
|
|
|
#ifdef TESTDISPLAY20x4 |
|
|
|
|
seq_printVelGraphBar(); |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
if (seq_menu == 3) { |
|
|
|
|
lcd.setCursor(15, 0); |
|
|
|
|
#ifdef TESTDISPLAY20x4 |
|
|
|
|
lcd.setCursor(17, 0); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
lcd.setCursor(19, 0); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
#else |
|
|
|
|
lcd.setCursor(13, 0); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
lcd.setCursor(15, 0); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
#endif |
|
|
|
|
lcd.setCursor(0, 1); |
|
|
|
|
lcd.print("x"); |
|
|
|
|
lcd.print("_"); |
|
|
|
|
lcd.setCursor(1, 1); |
|
|
|
|
lcd.print(seq_find_shortname(1)[0]); |
|
|
|
|
} |
|
|
|
|
if (seq_menu > 3 && seq_menu < 30) { |
|
|
|
|
if (seq_menu > 3 && seq_menu < 19) { |
|
|
|
|
lcd.setCursor(seq_menu - 3, 1); |
|
|
|
|
lcd.print("x"); |
|
|
|
|
lcd.write(219); // cursor symbol
|
|
|
|
|
lcd.setCursor(seq_menu - 4, 1); |
|
|
|
|
lcd.print(seq_find_shortname(seq_menu - 4)[0]); |
|
|
|
|
lcd.setCursor(seq_menu - 2, 1); |
|
|
|
|
lcd.print(seq_find_shortname(seq_menu - 2)[0]); |
|
|
|
|
if (seq_menu < 18) |
|
|
|
|
{ |
|
|
|
|
lcd.setCursor(seq_menu - 2, 1); |
|
|
|
|
lcd.print(seq_find_shortname(seq_menu - 2)[0]); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (LCDML.FUNC_close()) // ****** STABLE END *********
|
|
|
|
@ -4986,12 +5093,7 @@ void UI_func_sequencer(uint8_t param) |
|
|
|
|
encoderDir[ENC_R].reset(); |
|
|
|
|
seq_menu = 0; |
|
|
|
|
seq_active_function = 99; |
|
|
|
|
// seq_running = false;
|
|
|
|
|
// seq_recording = false;
|
|
|
|
|
// seq_note_in = 0;
|
|
|
|
|
// seq_step = 0;
|
|
|
|
|
// seq_chain_active_step = 0;
|
|
|
|
|
// MicroDexed[0]->panic();
|
|
|
|
|
lcd_special_chars(SCROLLBAR); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -5000,6 +5102,8 @@ void UI_func_arpeggio(uint8_t param) |
|
|
|
|
if (LCDML.FUNC_setup()) // ****** SETUP *********
|
|
|
|
|
{ |
|
|
|
|
encoderDir[ENC_R].reset(); |
|
|
|
|
lcd.createChar(0, (uint8_t*)special_chars[19]); //play symbol
|
|
|
|
|
lcd.createChar(2, (uint8_t*)special_chars[21]); //stop symbol
|
|
|
|
|
seq_temp_select_menu = 0; |
|
|
|
|
seq_temp_active_menu = 0; |
|
|
|
|
lcd.setCursor( 0, 0); |
|
|
|
@ -5115,7 +5219,7 @@ void UI_func_arpeggio(uint8_t param) |
|
|
|
|
lcd.print(" "); |
|
|
|
|
lcd.setCursor( 9, 1); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
lcd.setCursor( 10, 1); |
|
|
|
|
lcd.setCursor( 13, 1); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
lcd.setCursor( 15, 1); |
|
|
|
|
lcd.print(" "); |
|
|
|
@ -5130,7 +5234,7 @@ void UI_func_arpeggio(uint8_t param) |
|
|
|
|
lcd.print(" "); |
|
|
|
|
lcd.setCursor( 5, 0); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
lcd.setCursor( 11, 0); |
|
|
|
|
lcd.setCursor( 13, 0); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
lcd.setCursor( 15, 0); |
|
|
|
|
lcd.print(" "); |
|
|
|
@ -5141,7 +5245,7 @@ void UI_func_arpeggio(uint8_t param) |
|
|
|
|
lcd.print(" "); |
|
|
|
|
lcd.setCursor( 9, 1); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
lcd.setCursor( 11, 0); |
|
|
|
|
lcd.setCursor( 13, 0); |
|
|
|
|
lcd.print("["); |
|
|
|
|
lcd.setCursor( 15, 0); |
|
|
|
|
lcd.print("]"); |
|
|
|
@ -5152,7 +5256,7 @@ void UI_func_arpeggio(uint8_t param) |
|
|
|
|
} |
|
|
|
|
else if (seq_temp_select_menu == 3) |
|
|
|
|
{ |
|
|
|
|
lcd.setCursor( 11, 0); |
|
|
|
|
lcd.setCursor( 13, 0); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
lcd.setCursor( 15, 0); |
|
|
|
|
lcd.print(" "); |
|
|
|
@ -5169,6 +5273,7 @@ void UI_func_arpeggio(uint8_t param) |
|
|
|
|
if (LCDML.FUNC_close()) // ****** STABLE END *********
|
|
|
|
|
{ |
|
|
|
|
encoderDir[ENC_R].reset(); |
|
|
|
|
lcd_special_chars(SCROLLBAR); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -5293,7 +5398,6 @@ void UI_func_seq_pat_chain(uint8_t param) |
|
|
|
|
lcd.print(" "); |
|
|
|
|
lcd.setCursor(9 , 1); |
|
|
|
|
lcd.print(" "); |
|
|
|
|
|
|
|
|
|
lcd.setCursor( 11, 0); |
|
|
|
|
lcd.print("["); |
|
|
|
|
lcd.setCursor( 12, 0); |
|
|
|
@ -5316,16 +5420,12 @@ void UI_func_seq_pat_chain(uint8_t param) |
|
|
|
|
lcd.print(seq_chain_lenght + 1); |
|
|
|
|
lcd.setCursor( 15, 0); |
|
|
|
|
lcd.print("]"); |
|
|
|
|
|
|
|
|
|
lcd.setCursor(2 , 0); |
|
|
|
|
lcd.print( seq_patternchain[seq_chain_active_chainstep][0]); |
|
|
|
|
|
|
|
|
|
lcd.setCursor(2 , 1); |
|
|
|
|
lcd.print( seq_patternchain[seq_chain_active_chainstep][1]); |
|
|
|
|
|
|
|
|
|
lcd.setCursor(8 , 0); |
|
|
|
|
lcd.print( seq_patternchain[seq_chain_active_chainstep][2]); |
|
|
|
|
|
|
|
|
|
lcd.setCursor(8 , 1); |
|
|
|
|
lcd.print( seq_patternchain[seq_chain_active_chainstep][3]); |
|
|
|
|
} else if (seq_temp_select_menu == 0 && seq_temp_active_menu == 0) // Drum 0 modify
|
|
|
|
@ -5954,10 +6054,17 @@ void UI_func_eeprom_reset(uint8_t param) |
|
|
|
|
|
|
|
|
|
void UI_update_instance_icons() |
|
|
|
|
{ |
|
|
|
|
#ifdef TESTDISPLAY20x4 |
|
|
|
|
lcd.setCursor(18, 0); |
|
|
|
|
lcd.write(0); //Icon for first instance
|
|
|
|
|
lcd.setCursor(19, 0); |
|
|
|
|
lcd.write(1); //Icon for second instance
|
|
|
|
|
#else |
|
|
|
|
lcd.setCursor(14, 0); |
|
|
|
|
lcd.write(0); //Icon for first instance
|
|
|
|
|
lcd.setCursor(15, 0); |
|
|
|
|
lcd.write(1); //Icon for second instance
|
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void UI_func_voice_select(uint8_t param) |
|
|
|
@ -5966,6 +6073,12 @@ void UI_func_voice_select(uint8_t param) |
|
|
|
|
|
|
|
|
|
if (LCDML.FUNC_setup()) // ****** SETUP *********
|
|
|
|
|
{ |
|
|
|
|
#ifdef TESTDISPLAY20x4 |
|
|
|
|
lcd.setCursor(0, 3); |
|
|
|
|
lcd.print("MENU"); |
|
|
|
|
lcd.setCursor(17, 3); |
|
|
|
|
lcd.print("+/-"); |
|
|
|
|
#endif |
|
|
|
|
encoderDir[ENC_R].reset(); |
|
|
|
|
|
|
|
|
|
lcd_active_instance_number(selected_instance_id); |
|
|
|
@ -6214,6 +6327,27 @@ void UI_func_voice_select(uint8_t param) |
|
|
|
|
|
|
|
|
|
lcd.show(0, 0, 2, configuration.performance.bank[selected_instance_id]); |
|
|
|
|
lcd.show(1, 0, 2, configuration.performance.voice[selected_instance_id] + 1); |
|
|
|
|
#ifdef TESTDISPLAY20x4 |
|
|
|
|
string_toupper(bank_name); |
|
|
|
|
lcd.show(0, 4, 8, bank_name); |
|
|
|
|
string_toupper(voice_name); |
|
|
|
|
lcd.show(1, 4, 10, voice_name); |
|
|
|
|
switch (menu_voice_select) |
|
|
|
|
{ |
|
|
|
|
case MENU_VOICE_BANK: |
|
|
|
|
lcd.show(0, 3, 1, "["); |
|
|
|
|
lcd.show(0, 12, 1, "]"); |
|
|
|
|
lcd.show(1, 3, 1, " "); |
|
|
|
|
lcd.show(1, 14, 1, " "); |
|
|
|
|
break; |
|
|
|
|
case MENU_VOICE_SOUND: |
|
|
|
|
lcd.show(0, 3, 1, " "); |
|
|
|
|
lcd.show(0, 12, 1, " "); |
|
|
|
|
lcd.show(1, 3, 1, "["); |
|
|
|
|
lcd.show(1, 14, 1, "]"); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
#else |
|
|
|
|
string_toupper(bank_name); |
|
|
|
|
lcd.show(0, 3, 8, bank_name); |
|
|
|
|
lcd.show(0, 12, 1, " "); //forced because this char does not clear after fav-search (because the bank name is one char to short to do it).
|
|
|
|
@ -6235,9 +6369,9 @@ void UI_func_voice_select(uint8_t param) |
|
|
|
|
lcd.show(1, 13, 1, "]"); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
draw_favorite_icon(configuration.performance.bank[selected_instance_id], configuration.performance.voice[selected_instance_id], selected_instance_id); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (LCDML.FUNC_close()) // ****** STABLE END *********
|
|
|
|
|
{ |
|
|
|
|
lcd_special_chars(SCROLLBAR); |
|
|
|
@ -8758,13 +8892,11 @@ void locate_next_favorite() |
|
|
|
|
do { //seek in next bank
|
|
|
|
|
|
|
|
|
|
configuration.performance.bank[selected_instance_id]++; |
|
|
|
|
|
|
|
|
|
if ( configuration.performance.bank[selected_instance_id] > MAX_BANKS - 1 && favsearcher < 190) |
|
|
|
|
{ |
|
|
|
|
configuration.performance.bank[selected_instance_id] = 0; |
|
|
|
|
configuration.performance.voice[selected_instance_id] = 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
favsearcher++; |
|
|
|
|
} while (quick_check_favorites_in_bank(configuration.performance.bank[selected_instance_id], selected_instance_id) == false && |
|
|
|
|
favsearcher < 132 ); |
|
|
|
@ -8780,7 +8912,6 @@ void locate_next_favorite() |
|
|
|
|
selected_instance_id) == false && favsearcher < 170); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
favsearcher = 0; |
|
|
|
|
|
|
|
|
@ -8793,7 +8924,6 @@ void locate_next_non_favorite() |
|
|
|
|
lcd.print(">SEARCHING"); |
|
|
|
|
do { |
|
|
|
|
configuration.performance.voice[selected_instance_id]++; |
|
|
|
|
|
|
|
|
|
if (configuration.performance.voice[selected_instance_id] > 31) { |
|
|
|
|
configuration.performance.voice[selected_instance_id] = 0; |
|
|
|
|
//configuration.performance.bank[selected_instance_id]++;
|
|
|
|
@ -8831,17 +8961,14 @@ bool check_favorite(uint8_t b, uint8_t v, uint8_t instance_id) |
|
|
|
|
v = constrain(v, 0, MAX_VOICES - 1); |
|
|
|
|
char tmp[18]; |
|
|
|
|
File myFav; |
|
|
|
|
|
|
|
|
|
if (sd_card > 0) |
|
|
|
|
{ |
|
|
|
|
sprintf(tmp, "/%s/%d/%d.fav", FAV_CONFIG_PATH, b, v); |
|
|
|
|
|
|
|
|
|
#ifdef DEBUG |
|
|
|
|
Serial.print("check if Voice is a Favorite: "); |
|
|
|
|
Serial.print(tmp); |
|
|
|
|
Serial.println(); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
if (SD.exists(tmp)) |
|
|
|
|
{ //is Favorite
|
|
|
|
|
#ifdef DEBUG |
|
|
|
@ -8868,19 +8995,25 @@ void draw_favorite_icon(uint8_t b, uint8_t v, uint8_t instance_id) |
|
|
|
|
v = constrain(v, 0, MAX_VOICES - 1); |
|
|
|
|
char tmp[18]; |
|
|
|
|
File myFav; |
|
|
|
|
|
|
|
|
|
if (sd_card > 0) |
|
|
|
|
{ |
|
|
|
|
sprintf(tmp, "/%s/%d/%d.fav", FAV_CONFIG_PATH, b, v); |
|
|
|
|
|
|
|
|
|
if (SD.exists(tmp)) |
|
|
|
|
{ //is Favorite
|
|
|
|
|
#ifdef TESTDISPLAY20x4 |
|
|
|
|
lcd.setCursor(17, 0); |
|
|
|
|
#else |
|
|
|
|
lcd.setCursor(13, 0); |
|
|
|
|
#endif |
|
|
|
|
lcd.write(2); //fav symbol
|
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ // it was not a favorite
|
|
|
|
|
#ifdef TESTDISPLAY20x4 |
|
|
|
|
lcd.setCursor(17, 0); |
|
|
|
|
#else |
|
|
|
|
lcd.setCursor(13, 0); |
|
|
|
|
#endif |
|
|
|
|
lcd.print(" "); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -8899,7 +9032,6 @@ bool quick_check_favorites_in_bank(uint8_t b, uint8_t instance_id) |
|
|
|
|
Serial.print(tmp); |
|
|
|
|
Serial.println(); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
if (SD.exists(tmp) ) |
|
|
|
|
{ // this bank HAS at least 1 favorite(s)
|
|
|
|
|
#ifdef DEBUG |
|
|
|
@ -8924,14 +9056,12 @@ void save_favorite(uint8_t b, uint8_t v, uint8_t instance_id) |
|
|
|
|
#ifdef DEBUG |
|
|
|
|
Serial.println("Starting saving Favorite."); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
b = constrain(b, 0, MAX_BANKS - 1); |
|
|
|
|
v = constrain(v, 0, MAX_VOICES - 1); |
|
|
|
|
char tmp[18]; |
|
|
|
|
char tmpfolder[18]; |
|
|
|
|
File myFav; |
|
|
|
|
uint8_t i = 0, countfavs = 0; |
|
|
|
|
|
|
|
|
|
if (sd_card > 0) |
|
|
|
|
{ |
|
|
|
|
sprintf(tmp, "/%s/%d/%d.fav", FAV_CONFIG_PATH, b, v); |
|
|
|
@ -8940,7 +9070,6 @@ void save_favorite(uint8_t b, uint8_t v, uint8_t instance_id) |
|
|
|
|
Serial.println("Save Favorite to SD card..."); |
|
|
|
|
Serial.println(tmp); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
if (!SD.exists(tmp)) |
|
|
|
|
{ //create Favorite Semaphore
|
|
|
|
|
if (!SD.exists(tmpfolder)) |
|
|
|
@ -8950,8 +9079,11 @@ void save_favorite(uint8_t b, uint8_t v, uint8_t instance_id) |
|
|
|
|
myFav = SD.open(tmp, FILE_WRITE); |
|
|
|
|
myFav.close(); |
|
|
|
|
Serial.println("Favorite saved..."); |
|
|
|
|
|
|
|
|
|
#ifdef TESTDISPLAY20x4 |
|
|
|
|
lcd.setCursor(17, 0); |
|
|
|
|
#else |
|
|
|
|
lcd.setCursor(13, 0); |
|
|
|
|
#endif |
|
|
|
|
lcd.write(2); //fav symbol
|
|
|
|
|
#ifdef DEBUG |
|
|
|
|
Serial.println("Added to Favorites..."); |
|
|
|
@ -8970,14 +9102,17 @@ void save_favorite(uint8_t b, uint8_t v, uint8_t instance_id) |
|
|
|
|
if (countfavs == 0) { |
|
|
|
|
sprintf(tmp, "/%s/%d", FAV_CONFIG_PATH, b); |
|
|
|
|
SD.rmdir(tmp); |
|
|
|
|
|
|
|
|
|
#ifdef DEBUG |
|
|
|
|
Serial.println("Fav count in bank:"); |
|
|
|
|
Serial.print(countfavs); |
|
|
|
|
Serial.println("Removed folder since no voice in bank flagged as favorite any more"); |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
#ifdef TESTDISPLAY20x4 |
|
|
|
|
lcd.setCursor(17, 0); |
|
|
|
|
#else |
|
|
|
|
lcd.setCursor(13, 0); |
|
|
|
|
#endif |
|
|
|
|
lcd.print(" "); //remove fav symbol
|
|
|
|
|
#ifdef DEBUG |
|
|
|
|
Serial.println("Removed from Favorites..."); |
|
|
|
@ -8991,6 +9126,5 @@ char* basename(const char* filename) |
|
|
|
|
char* p = strrchr (filename, '/'); |
|
|
|
|
return p ? p + 1 : (char *) filename; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#endif |
|
|
|
|
#endif |
|
|
|
|