@ -4241,6 +4241,23 @@ 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 " ) ;
} else if ( seq_running = = true & & seq_recording = = false )
{
seq_note_in = 0 ;
lcd . print ( " REC " ) ;
} else if ( seq_running = = true & & seq_recording = = true )
{
seq_note_in = 0 ;
lcd . print ( " STP " ) ;
}
}
void UI_func_sequencer ( uint8_t param )
{
if ( LCDML . FUNC_setup ( ) ) // ****** SETUP *********
@ -4251,61 +4268,68 @@ void UI_func_sequencer(uint8_t param)
// setup function
lcd . setCursor ( 1 , 0 ) ;
lcd . show ( 0 , 1 , 6 , basename ( drum_config [ activesample ] . name ) ) ;
lcd . setCursor ( 9 , 0 ) ;
if ( seq_running = = false & & seq_recording = = false )
{
lcd . print ( " PLY " ) ;
} else if ( seq_running = = true & & seq_recording = = false )
{
seq_note_in = 0 ;
lcd . print ( " REC " ) ;
} else if ( seq_running = = true & & seq_recording = = true )
{
seq_note_in = 0 ;
lcd . print ( " STP " ) ;
}
seq_refresh_display_play_status ( ) ;
lcd . setCursor ( 14 , 0 ) ;
lcd . print ( seq_active_track ) ;
seq_printAllSeqSteps ( ) ;
}
if ( LCDML . FUNC_loop ( ) ) // ****** LOOP *********
{ if ( seq_menu = = 32 ) { // is in sub-function - copy pattern
seq_active_function = 98 ;
{ if ( seq_menu = = 33 ) { // is in sub-function - fill pattern
seq_active_function = 95 ;
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_active_menu = constrain ( seq_temp_active_menu + 1 , 0 , 3 ) ;
}
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_active_menu = constrain ( seq_temp_active_menu - 1 , 0 , 3 ) ;
}
}
} else
} else if ( seq_menu = = 30 ) { // is in sub-function - swap pattern
seq_active_function = 98 ;
if ( ( LCDML . BT_checkDown ( ) & & encoderDir [ ENC_R ] . Down ( ) ) | | ( LCDML . BT_checkUp ( ) & & encoderDir [ ENC_R ] . Up ( ) ) )
{
if ( LCDML . BT_checkDown ( ) ) {
if ( seq_menu = = 32 ) { // is in sub-function - fill pattern
seq_active_function = 97 ;
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 ;
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
} 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 ( ) ) {
if ( seq_active_function = = 99 )
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 ( ) ) )
{
@ -4320,18 +4344,18 @@ 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 ( ) )
activesample = constrain ( activesample + 1 , 0 , NUM_DRUMSET_CONFIG + 3 ) ; //old value +1
activesample = constrain ( activesample + 1 , 0 , NUM_DRUMSET_CONFIG + 4 ) ;
else if ( LCDML . BT_checkUp ( ) )
activesample = constrain ( activesample - 1 , 0 , NUM_DRUMSET_CONFIG + 3 ) ;
activesample = constrain ( activesample - 1 , 0 , NUM_DRUMSET_CONFIG + 4 ) ;
}
} else //is in Instrument Mode
{
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 , 113 ) ;
temp_int = constrain ( temp_int + 1 , 0 , 114 ) ;
else if ( LCDML . BT_checkUp ( ) )
temp_int = constrain ( temp_int - 1 , 0 , 113 ) ;
temp_int = constrain ( temp_int - 1 , 0 , 114 ) ;
}
}
} else if ( seq_active_function = = 2 )
@ -4349,29 +4373,49 @@ void UI_func_sequencer(uint8_t param)
}
if ( LCDML . BT_checkEnter ( ) ) //handle button presses during menu >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
{
if ( seq_menu = = 32 ) { //copy patterns
// memcpy( seq_data[temp_int], seq_data[seq_active_track], sizeof(seq_active_track[0]));
// memcpy( seq_vel[temp_int], seq_vel[seq_active_track], sizeof(seq_active_track[0]));
seq_content_type [ temp_int ] = seq_content_type [ seq_active_track ] ;
if ( seq_menu = = 32 & & seq_active_function = = 97 ) //fill pattern every 1/4, 1/8, 1/16 step with active sample/note step 1
{
seq_active_function = 96 ;
seq_menu = 33 ;
} else if ( seq_menu = = 33 & & seq_active_function = = 95 ) //fill pattern every 1/4, 1/8, 1/16 step with active sample/note step 2
{
if ( seq_content_type [ seq_active_track ] = = 0 ) { //Drumtrack
for ( uint8_t i = 0 ; i < 16 ; i + + )
{
seq_data [ seq_active_track ] [ i ] = drum_config [ seq_temp_select_menu ] . midinote ;
seq_vel [ seq_active_track ] [ i ] = 120 ;
if ( seq_temp_active_menu = = 0 ) i = i + 3 ; else if ( seq_temp_active_menu = = 1 ) i = i + 1 ;
}
}
else
{ //Inst. Track
for ( uint8_t i = 0 ; i < 16 ; i + + )
{
seq_data [ seq_active_track ] [ i ] = seq_temp_select_menu ;
seq_vel [ seq_active_track ] [ i ] = 120 ;
if ( seq_temp_active_menu = = 0 ) i = i + 3 ; else if ( seq_temp_active_menu = = 1 ) i = i + 1 ;
}
}
seq_menu = 0 ;
seq_active_function = 0 ;
activesample = 0 ;
temp_int = seq_data [ seq_active_track ] [ 0 ] ;
lcd . setCursor ( 9 , 0 ) ;
if ( seq_running = = false & & seq_recording = = false )
{
lcd . print ( " PLY " ) ;
} else if ( seq_running = = true & & seq_recording = = false )
{
lcd . print ( " REC " ) ;
} else if ( seq_running = = true & & seq_recording = = true )
{
lcd . print ( " STP " ) ;
}
seq_note_in = 0 ;
seq_refresh_display_play_status ( ) ;
seq_printAllSeqSteps ( ) ;
} else if ( seq_menu = = 30 ) { //swap patterns
} else if ( seq_menu = = 31 ) //copy patterns
{
memcpy ( seq_data [ temp_int ] , seq_data [ seq_active_track ] , sizeof ( seq_data [ 0 ] ) ) ;
memcpy ( seq_vel [ temp_int ] , seq_vel [ seq_active_track ] , sizeof ( seq_vel [ 0 ] ) ) ;
seq_content_type [ temp_int ] = seq_content_type [ seq_active_track ] ;
seq_menu = 0 ;
seq_active_function = 0 ;
activesample = 0 ;
temp_int = seq_data [ seq_active_track ] [ 0 ] ;
seq_refresh_display_play_status ( ) ;
seq_printAllSeqSteps ( ) ;
} else if ( seq_menu = = 30 ) //swap patterns
{
uint8_t data_temp [ 1 ] [ 16 ] ;
uint8_t vel_temp [ 1 ] [ 16 ] ;
uint8_t content_type_temp ;
@ -4388,18 +4432,7 @@ void UI_func_sequencer(uint8_t param)
seq_active_function = 0 ;
activesample = 0 ;
temp_int = seq_data [ seq_active_track ] [ 0 ] ;
lcd . setCursor ( 9 , 0 ) ;
if ( seq_running = = false & & seq_recording = = false )
{
lcd . print ( " PLY " ) ;
} else if ( seq_running = = true & & seq_recording = = false )
{
lcd . print ( " REC " ) ;
} else if ( seq_running = = true & & seq_recording = = true )
{
lcd . print ( " STP " ) ;
}
seq_note_in = 0 ;
seq_refresh_display_play_status ( ) ;
seq_printAllSeqSteps ( ) ;
}
if ( seq_menu = = 0 & & seq_active_function = = 99 )
@ -4407,15 +4440,23 @@ void UI_func_sequencer(uint8_t param)
seq_active_function = 0 ;
} else if ( seq_menu = = 0 & & seq_active_function = = 0 )
{
if ( ( seq_content_type [ seq_active_track ] = = 0 & & activesample = = NUM_DRUMSET_CONFIG + 3 ) | | ( seq_content_type [ seq_active_track ] = = 1 & & temp_int = = 113 ) )
{ //swap patterns
if ( ( seq_content_type [ seq_active_track ] = = 0 & & activesample = = NUM_DRUMSET_CONFIG + 4 ) | | ( seq_content_type [ seq_active_track ] = = 1 & & temp_int = = 114 ) )
{ //fill patterns
lcd . setCursor ( 0 , 0 ) ;
lcd . print ( " Fill Pattern: " ) ;
lcd . setCursor ( 9 , 1 ) ;
lcd . print ( " " ) ;
seq_menu = 32 ;
seq_temp_select_menu = 0 ;
seq_temp_active_menu = 0 ;
}
else if ( ( seq_content_type [ seq_active_track ] = = 0 & & activesample = = NUM_DRUMSET_CONFIG + 3 ) | | ( seq_content_type [ seq_active_track ] = = 1 & & temp_int = = 113 ) )
{ //swap patterns: Active pattern <-> destination pattern
lcd . setCursor ( 0 , 0 ) ;
lcd . print ( " Swap Pattern: " ) ;
temp_int = seq_active_track + 1 ;
if ( temp_int > 9 ) temp_int = 0 ;
seq_menu = 30 ;
//seq_printAllSeqSteps();
} else if ( ( seq_content_type [ seq_active_track ] = = 0 & & activesample = = NUM_DRUMSET_CONFIG + 2 ) | | ( seq_content_type [ seq_active_track ] = = 1 & & temp_int = = 112 ) )
{ //copy pattern
lcd . setCursor ( 0 , 0 ) ;
@ -4498,7 +4539,63 @@ void UI_func_sequencer(uint8_t param)
}
//button check end <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
if ( seq_menu = = 30 ) {
if ( seq_menu = = 33 ) { //fill pattern 2nd parameter
lcd . setCursor ( 4 , 1 ) ;
lcd . print ( " " ) ;
lcd . setCursor ( 9 , 1 ) ;
lcd . print ( " " ) ;
lcd . setCursor ( 10 , 1 ) ;
lcd . print ( " [ " ) ;
lcd . setCursor ( 15 , 1 ) ;
lcd . print ( " ] " ) ;
lcd . setCursor ( 11 , 1 ) ;
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 ) { //inst
lcd . setCursor ( 0 , 1 ) ;
lcd . print ( " with " ) ;
lcd . setCursor ( 4 , 1 ) ;
lcd . print ( " [ " ) ;
lcd . setCursor ( 9 , 1 ) ;
lcd . print ( " ] " ) ;
lcd . show ( 1 , 5 , 4 , basename ( drum_config [ seq_temp_select_menu ] . name ) ) ;
lcd . setCursor ( 11 , 1 ) ;
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
{ //inst
lcd . setCursor ( 0 , 1 ) ;
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 ) ;
lcd . print ( " " ) ;
lcd . setCursor ( 9 , 1 ) ;
lcd . print ( " ] " ) ;
lcd . setCursor ( 11 , 1 ) ;
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 = = 31 ) { //copy pattern
lcd . setCursor ( 13 , 0 ) ;
lcd . print ( " [ " ) ;
lcd . setCursor ( 15 , 0 ) ;
lcd . print ( " ] " ) ;
lcd . setCursor ( 0 , 1 ) ;
lcd . print ( " to: [ ] " ) ;
lcd . setCursor ( 14 , 1 ) ;
lcd . print ( temp_int ) ;
} else if ( seq_menu = = 30 ) { //swap pattern
lcd . setCursor ( 13 , 0 ) ;
lcd . print ( " [ " ) ;
lcd . setCursor ( 15 , 0 ) ;
@ -4523,7 +4620,7 @@ void UI_func_sequencer(uint8_t param)
lcd . print ( " EMPTY " ) ;
} else if ( activesample = = NUM_DRUMSET_CONFIG ) {
lcd . setCursor ( 1 , 0 ) ;
lcd . print ( " ClrTrk " ) ;
lcd . print ( " ClrPat " ) ;
} else if ( activesample = = NUM_DRUMSET_CONFIG + 1 ) {
lcd . setCursor ( 1 , 0 ) ;
lcd . print ( " ClrAll " ) ;
@ -4536,6 +4633,10 @@ void UI_func_sequencer(uint8_t param)
lcd . setCursor ( 1 , 0 ) ;
lcd . print ( " Swap P " ) ;
}
else if ( activesample = = NUM_DRUMSET_CONFIG + 4 ) {
lcd . setCursor ( 1 , 0 ) ;
lcd . print ( " Fill P " ) ;
}
lcd . setCursor ( 7 , 0 ) ;
lcd . print ( " ] " ) ;
} else //Inst. Mode
@ -4551,7 +4652,7 @@ void UI_func_sequencer(uint8_t param)
lcd . print ( " EMPTY " ) ;
} else if ( temp_int = = 110 ) {
lcd . setCursor ( 1 , 0 ) ;
lcd . print ( " ClrTrk " ) ;
lcd . print ( " ClrPat " ) ;
} else if ( temp_int = = 111 ) {
lcd . setCursor ( 1 , 0 ) ;
lcd . print ( " ClrAll " ) ;
@ -4562,6 +4663,10 @@ void UI_func_sequencer(uint8_t param)
lcd . setCursor ( 1 , 0 ) ;
lcd . print ( " Swap P " ) ;
}
else if ( temp_int = = 114 ) {
lcd . setCursor ( 1 , 0 ) ;
lcd . print ( " Fill P " ) ;
}
lcd . setCursor ( 7 , 0 ) ;
lcd . print ( " ] " ) ;
}
@ -4578,19 +4683,7 @@ void UI_func_sequencer(uint8_t param)
lcd . setCursor ( 8 , 0 ) ;
lcd . print ( " [ " ) ;
lcd . setCursor ( 9 , 0 ) ;
if ( seq_running = = false & & seq_recording = = false )
{
lcd . print ( " PLY " ) ;
} else if ( seq_running = = true & & seq_recording = = false )
{
seq_note_in = 0 ;
lcd . print ( " REC " ) ;
} else if ( seq_running = = true & & seq_recording = = true )
{
seq_note_in = 0 ;
lcd . print ( " STP " ) ;
}
seq_refresh_display_play_status ( ) ;
lcd . setCursor ( 12 , 0 ) ;
lcd . print ( " ] " ) ;
}