@ -598,6 +598,11 @@ void handleControlChange(byte inChannel, byte inCtrl, byte inValue)
# endif
configuration . performance . bank [ instance_id ] = constrain ( ( inValue < < 7 ) & configuration . performance . bank [ instance_id ] , 0 , MAX_BANKS - 1 ) ;
load_sd_voice ( configuration . performance . bank [ instance_id ] , configuration . performance . voice [ instance_id ] , instance_id ) ;
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_voice_select ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
break ;
case 1 :
# ifdef DEBUG
@ -635,6 +640,11 @@ void handleControlChange(byte inChannel, byte inCtrl, byte inValue)
# else
dexed_level [ instance_id ] - > gain ( mapfloat ( configuration . dexed [ instance_id ] . sound_intensity , SOUND_INTENSITY_MIN , SOUND_INTENSITY_MAX , 0.0 , SOUND_INTENSITY_AMP_MAX ) ) ;
# endif
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_sound_intensity ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
break ;
case 10 : // Pan
# ifdef DEBUG
@ -642,6 +652,11 @@ void handleControlChange(byte inChannel, byte inCtrl, byte inValue)
# endif
configuration . dexed [ instance_id ] . pan = map ( inValue , 0 , 0x7f , PANORAMA_MIN , PANORAMA_MAX ) ;
mono2stereo [ instance_id ] - > panorama ( mapfloat ( configuration . dexed [ instance_id ] . pan , PANORAMA_MIN , PANORAMA_MAX , - 1.0 , 1.0 ) ) ;
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_panorama ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
break ;
case 32 : // BankSelect LSB
# ifdef DEBUG
@ -649,6 +664,11 @@ void handleControlChange(byte inChannel, byte inCtrl, byte inValue)
# endif
configuration . performance . bank [ instance_id ] = constrain ( inValue , 0 , MAX_BANKS - 1 ) ;
load_sd_voice ( configuration . performance . bank [ instance_id ] , configuration . performance . voice [ instance_id ] , instance_id ) ;
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_voice_select ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
break ;
case 64 :
MicroDexed [ instance_id ] - > setSustain ( inValue > 63 ) ;
@ -666,31 +686,61 @@ void handleControlChange(byte inChannel, byte inCtrl, byte inValue)
break ;
case 65 :
MicroDexed [ instance_id ] - > setPortamentoMode ( configuration . dexed [ instance_id ] . portamento_mode , configuration . dexed [ instance_id ] . portamento_glissando , configuration . dexed [ instance_id ] . portamento_time ) ;
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_portamento_mode ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
break ;
# if defined(USE_FX)
case 103 : // CC 103: filter resonance
configuration . dexed [ instance_id ] . filter_resonance = map ( inValue , 0 , 0x7f , FILTER_RESONANCE_MIN , FILTER_RESONANCE_MAX ) ;
MicroDexed [ instance_id ] - > fx . Reso = mapfloat ( configuration . dexed [ instance_id ] . filter_resonance , FILTER_RESONANCE_MIN , FILTER_RESONANCE_MAX , 1.0 , 0.0 ) ;
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_filter_resonance ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
break ;
case 104 : // CC 104: filter cutoff
configuration . dexed [ instance_id ] . filter_cutoff = map ( inValue , 0 , 0x7f , FILTER_CUTOFF_MIN , FILTER_CUTOFF_MAX ) ;
MicroDexed [ instance_id ] - > fx . Cutoff = mapfloat ( configuration . dexed [ instance_id ] . filter_cutoff , FILTER_CUTOFF_MIN , FILTER_CUTOFF_MAX , 1.0 , 0.0 ) ;
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_filter_cutoff ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
break ;
case 105 : // CC 105: delay time
configuration . fx . delay_time = map ( inValue , 0 , 0x7f , DELAY_TIME_MIN , DELAY_TIME_MAX ) ;
delay_r . delay ( 0 , configuration . fx . delay_time * 10 ) ;
delay_l . delay ( 0 , configuration . fx . delay_time * 10 ) ;
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_delay_time ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
case 106 : // CC 106: delay feedback
configuration . fx . delay_feedback = map ( inValue , 0 , 0x7f , DELAY_FEEDBACK_MIN , DELAY_FEEDBACK_MAX ) ;
//delay_fb_mixer_r.gain(0, 1.0); // original signal
delay_fb_mixer_r . gain ( 1 , mapfloat ( configuration . fx . delay_feedback , DELAY_FEEDBACK_MIN , DELAY_FEEDBACK_MAX , 0.0 , 1.0 ) ) ; // amount of feedback
//delay_fb_mixer_l.gain(0, 1.0); // original signal
delay_fb_mixer_l . gain ( 1 , mapfloat ( configuration . fx . delay_feedback , DELAY_FEEDBACK_MIN , DELAY_FEEDBACK_MAX , 0.0 , 1.0 ) ) ; // amount of feedback
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_delay_feedback ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
break ;
case 107 : // CC 107: delay volume
configuration . dexed [ instance_id ] . delay_send = map ( inValue , 0 , 0x7f , DELAY_SEND_MIN , DELAY_SEND_MAX ) ;
master_mixer_r . gain ( DELAY , mapfloat ( configuration . fx . delay_level , DELAY_LEVEL_MIN , DELAY_LEVEL_MAX , 0.0 , 1.0 ) ) ;
master_mixer_l . gain ( DELAY , mapfloat ( configuration . fx . delay_level , DELAY_LEVEL_MIN , DELAY_LEVEL_MAX , 0.0 , 1.0 ) ) ;
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_delay_level ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
break ;
# endif
case 120 :
@ -709,9 +759,6 @@ void handleControlChange(byte inChannel, byte inCtrl, byte inValue)
MicroDexed [ instance_id ] - > setMonoMode ( false ) ;
break ;
}
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
}
}
@ -753,11 +800,13 @@ void handleProgramChange(byte inChannel, byte inProgram)
# ifdef DISPLAY_LCD_SPI
change_disp_sd ( true ) ;
# endif
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_voice_select ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
}
}
}
void handleSystemExclusive ( byte * sysex , uint len )
@ -855,63 +904,125 @@ void handleSystemExclusive(byte * sysex, uint len)
case 65 :
configuration . dexed [ instance_id ] . pb_range = constrain ( sysex [ 5 ] , PB_RANGE_MIN , PB_RANGE_MAX ) ;
MicroDexed [ instance_id ] - > controllers . values_ [ kControllerPitchRange ] = configuration . dexed [ instance_id ] . pb_range ;
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_pb_range ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
break ;
case 66 :
configuration . dexed [ instance_id ] . pb_step = constrain ( sysex [ 5 ] , PB_STEP_MIN , PB_STEP_MAX ) ;
MicroDexed [ instance_id ] - > controllers . values_ [ kControllerPitchStep ] = configuration . dexed [ instance_id ] . pb_step ;
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_pb_step ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
break ;
case 67 :
configuration . dexed [ instance_id ] . portamento_mode = constrain ( sysex [ 5 ] , PORTAMENTO_MODE_MIN , PORTAMENTO_MODE_MAX ) ;
MicroDexed [ instance_id ] - > setPortamentoMode ( configuration . dexed [ instance_id ] . portamento_mode , configuration . dexed [ instance_id ] . portamento_glissando , configuration . dexed [ instance_id ] . portamento_time ) ;
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_portamento_mode ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
break ;
case 68 :
configuration . dexed [ instance_id ] . portamento_glissando = constrain ( sysex [ 5 ] , PORTAMENTO_GLISSANDO_MIN , PORTAMENTO_GLISSANDO_MAX ) ;
MicroDexed [ instance_id ] - > setPortamentoMode ( configuration . dexed [ instance_id ] . portamento_mode , configuration . dexed [ instance_id ] . portamento_glissando , configuration . dexed [ instance_id ] . portamento_time ) ;
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_portamento_glissando ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
break ;
case 69 :
configuration . dexed [ instance_id ] . portamento_time = constrain ( sysex [ 5 ] , PORTAMENTO_TIME_MIN , PORTAMENTO_TIME_MAX ) ;
MicroDexed [ instance_id ] - > setPortamentoMode ( configuration . dexed [ instance_id ] . portamento_mode , configuration . dexed [ instance_id ] . portamento_glissando , configuration . dexed [ instance_id ] . portamento_time ) ;
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_portamento_time ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
break ;
case 70 :
configuration . dexed [ instance_id ] . mw_range = constrain ( sysex [ 5 ] , MW_RANGE_MIN , MW_RANGE_MAX ) ;
MicroDexed [ instance_id ] - > controllers . wheel . setRange ( configuration . dexed [ instance_id ] . mw_range ) ;
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_mw_range ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
break ;
case 71 :
configuration . dexed [ instance_id ] . mw_assign = constrain ( sysex [ 5 ] , MW_ASSIGN_MIN , MW_ASSIGN_MAX ) ;
MicroDexed [ instance_id ] - > controllers . wheel . setTarget ( configuration . dexed [ instance_id ] . mw_assign ) ;
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_mw_assign ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
break ;
case 72 :
configuration . dexed [ instance_id ] . fc_range = constrain ( sysex [ 5 ] , FC_RANGE_MIN , FC_RANGE_MAX ) ;
MicroDexed [ instance_id ] - > controllers . foot . setRange ( configuration . dexed [ instance_id ] . fc_range ) ;
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_fc_range ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
break ;
case 73 :
configuration . dexed [ instance_id ] . fc_assign = constrain ( sysex [ 5 ] , FC_ASSIGN_MIN , FC_ASSIGN_MAX ) ;
MicroDexed [ instance_id ] - > controllers . foot . setTarget ( configuration . dexed [ instance_id ] . fc_assign ) ;
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_fc_assign ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
break ;
case 74 :
configuration . dexed [ instance_id ] . bc_range = constrain ( sysex [ 5 ] , BC_RANGE_MIN , BC_RANGE_MAX ) ;
MicroDexed [ instance_id ] - > controllers . breath . setRange ( configuration . dexed [ instance_id ] . bc_range ) ;
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_bc_range ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
break ;
case 75 :
configuration . dexed [ instance_id ] . bc_assign = constrain ( sysex [ 5 ] , BC_ASSIGN_MIN , BC_ASSIGN_MAX ) ;
MicroDexed [ instance_id ] - > controllers . breath . setTarget ( configuration . dexed [ instance_id ] . bc_assign ) ;
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_bc_assign ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
break ;
case 76 :
configuration . dexed [ instance_id ] . at_range = constrain ( sysex [ 5 ] , AT_RANGE_MIN , AT_RANGE_MAX ) ;
MicroDexed [ instance_id ] - > controllers . at . setRange ( configuration . dexed [ instance_id ] . at_range ) ;
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_at_range ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
break ;
case 77 :
configuration . dexed [ instance_id ] . at_assign = constrain ( sysex [ 5 ] , AT_ASSIGN_MIN , AT_ASSIGN_MAX ) ;
MicroDexed [ instance_id ] - > controllers . at . setTarget ( configuration . dexed [ instance_id ] . at_assign ) ;
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_at_assign ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
break ;
default :
MicroDexed [ instance_id ] - > data [ sysex [ 4 ] ] = sysex [ 5 ] ; // set function parameter
break ;
}
MicroDexed [ instance_id ] - > controllers . refresh ( ) ;
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
# ifdef DEBUG
else
@ -982,9 +1093,12 @@ void handleSystemExclusive(byte * sysex, uint len)
// show voice name
strncpy ( g_voice_name [ instance_id ] , ( char * ) & sysex [ 151 ] , VOICE_NAME_LEN - 1 ) ;
if ( LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_voice_select ) )
{
LCDML . OTHER_updateFunc ( ) ;
LCDML . loop_menu ( ) ;
}
}
else if ( len = = 4104 & & strlen ( receive_bank_filename ) > 0 )
{
int32_t bulk_checksum_calc = 0 ;