@ -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_sequence r ( uint8_t param ) ;
void UI_func_seq_pattern_edito r ( 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_sequence r ( uint8_t param )
void UI_func_seq_pattern_edito r ( 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 _in t = constrain ( temp _in t + 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