@ -42,6 +42,9 @@
# include "template_mixer.hpp"
# include "drumset.h"
# include "sequencer.h"
# if defined (USE_EPIANO)
# include "synth_mda_epiano.h"
# endif
# define _LCDML_DISP_cols LCD_cols
# define _LCDML_DISP_rows LCD_rows
@ -106,6 +109,7 @@ extern AudioMixer<2> microdexed_peak_mixer;
extern AudioAnalyzePeak microdexed_peak ;
# if defined(USE_FX)
# if defined(USE_EPIANO)
extern AudioSynthEPiano ep ;
extern AudioMixer < 4 > reverb_mixer_r ;
extern AudioMixer < 4 > reverb_mixer_l ;
# else
@ -352,7 +356,6 @@ void UI_func_epiano_highest_note(uint8_t param);
void UI_func_epiano_transpose ( uint8_t param ) ;
void UI_func_epiano_polyphony ( uint8_t param ) ;
void UI_func_epiano_velocity_sense ( uint8_t param ) ;
void UI_func_epiano_monopoly ( uint8_t param ) ;
void UI_update_instance_icons ( ) ;
bool UI_select_name ( uint8_t y , uint8_t x , char * edit_string , uint8_t len , bool init ) ;
uint8_t search_accepted_char ( uint8_t c ) ;
@ -2290,99 +2293,680 @@ void UI_func_favorites(uint8_t param)
}
}
void UI_func_epiano_sound_intensity ( uint8_t param )
void UI_func_epiano_midi_channel ( uint8_t param )
{
;
if ( LCDML . FUNC_setup ( ) ) // ****** SETUP *********
{
encoderDir [ ENC_R ] . reset ( ) ;
lcd . setCursor ( 0 , 0 ) ;
lcd . print ( F ( " EP MIDI Channel " ) ) ;
}
void UI_func_epiano_panorama ( uint8_t param )
if ( LCDML . FUNC_loop ( ) ) // ****** LOOP *********
{
;
if ( LCDML . BT_checkDown ( ) & & encoderDir [ ENC_R ] . Down ( ) )
configuration . epiano . midi_channel = constrain ( configuration . epiano . midi_channel + ENCODER [ ENC_R ] . speed ( ) , EP_MIDI_CHANNEL_MIN , EP_MIDI_CHANNEL_MAX ) ;
else if ( LCDML . BT_checkUp ( ) & & encoderDir [ ENC_R ] . Up ( ) )
configuration . epiano . midi_channel = constrain ( configuration . epiano . midi_channel - ENCODER [ ENC_R ] . speed ( ) , EP_MIDI_CHANNEL_MIN , EP_MIDI_CHANNEL_MAX ) ;
lcd . setCursor ( 0 , 1 ) ;
if ( configuration . epiano . midi_channel = = 0 )
{
lcd . print ( F ( " [OMNI] " ) ) ;
}
else
{
lcd_display_int ( configuration . epiano . midi_channel , 4 , false , true , false ) ;
}
}
void UI_func_epiano_decay ( uint8_t param )
if ( LCDML . FUNC_close ( ) ) // ****** STABLE END *********
{
;
lcd_special_chars ( SCROLLBAR ) ;
encoderDir [ ENC_R ] . reset ( ) ;
}
}
void UI_func_epiano_release ( uint8_t param )
void UI_func_epiano_low est_not e ( uint8_t param )
{
;
char note_name [ 4 ] ;
if ( LCDML . FUNC_setup ( ) ) // ****** SETUP *********
{
encoderDir [ ENC_R ] . reset ( ) ;
getNoteName ( note_name , configuration . epiano . lowest_note ) ;
lcd . setCursor ( 0 , 0 ) ;
lcd . print ( F ( " EP Lowest Note " ) ) ;
lcd . setCursor ( 0 , 1 ) ;
lcd . print ( F ( " [ " ) ) ;
lcd . print ( note_name ) ;
lcd . print ( F ( " ] " ) ) ;
}
void UI_func_epiano_hardness ( uint8_t param )
if ( LCDML . FUNC_loop ( ) ) // ****** LOOP *********
{
;
if ( ( LCDML . BT_checkDown ( ) & & encoderDir [ ENC_R ] . Down ( ) ) | | ( LCDML . BT_checkUp ( ) & & encoderDir [ ENC_R ] . Up ( ) ) | | ( LCDML . BT_checkEnter ( ) & & encoderDir [ ENC_R ] . ButtonShort ( ) ) )
{
if ( LCDML . BT_checkDown ( ) )
configuration . epiano . lowest_note = constrain ( configuration . epiano . lowest_note + ENCODER [ ENC_R ] . speed ( ) , EP_LOWEST_NOTE_MIN , EP_LOWEST_NOTE_MAX ) ;
else if ( LCDML . BT_checkUp ( ) )
configuration . epiano . lowest_note = constrain ( configuration . epiano . lowest_note - ENCODER [ ENC_R ] . speed ( ) , EP_LOWEST_NOTE_MIN , EP_LOWEST_NOTE_MAX ) ;
}
void UI_func_epiano_treble ( uint8_t param )
getNoteName ( note_name , configuration . epiano . lowest_note ) ;
lcd . setCursor ( 1 , 1 ) ;
lcd . print ( note_name ) ;
}
if ( LCDML . FUNC_close ( ) ) // ****** STABLE END *********
{
;
lcd_special_chars ( SCROLLBAR ) ;
encoderDir [ ENC_R ] . reset ( ) ;
}
}
void UI_func_epiano_stereo ( uint8_t param )
void UI_func_epiano_highest_note ( uint8_t param )
{
;
char note_name [ 4 ] ;
if ( LCDML . FUNC_setup ( ) ) // ****** SETUP *********
{
encoderDir [ ENC_R ] . reset ( ) ;
getNoteName ( note_name , configuration . dexed [ selected_instance_id ] . highest_note ) ;
lcd . setCursor ( 0 , 0 ) ;
lcd . print ( F ( " EP Highest Note " ) ) ;
lcd . setCursor ( 0 , 1 ) ;
lcd . print ( F ( " [ " ) ) ;
lcd . print ( note_name ) ;
lcd . print ( F ( " ] " ) ) ;
}
void UI_func_epiano_tune ( uint8_t param )
if ( LCDML . FUNC_loop ( ) ) // ****** LOOP *********
{
;
if ( ( LCDML . BT_checkDown ( ) & & encoderDir [ ENC_R ] . Down ( ) ) | | ( LCDML . BT_checkUp ( ) & & encoderDir [ ENC_R ] . Up ( ) ) | | ( LCDML . BT_checkEnter ( ) & & encoderDir [ ENC_R ] . ButtonShort ( ) ) )
{
if ( LCDML . BT_checkDown ( ) )
configuration . epiano . highest_note = constrain ( configuration . epiano . highest_note + ENCODER [ ENC_R ] . speed ( ) , EP_HIGHEST_NOTE_MIN , EP_HIGHEST_NOTE_MAX ) ;
else if ( LCDML . BT_checkUp ( ) )
configuration . epiano . highest_note = constrain ( configuration . epiano . highest_note - ENCODER [ ENC_R ] . speed ( ) , EP_HIGHEST_NOTE_MIN , EP_HIGHEST_NOTE_MAX ) ;
}
void UI_func_epiano_detune ( uint8_t param )
getNoteName ( note_name , configuration . epiano . highest_note ) ;
lcd . setCursor ( 1 , 1 ) ;
lcd . print ( note_name ) ;
}
if ( LCDML . FUNC_close ( ) ) // ****** STABLE END *********
{
;
lcd_special_chars ( SCROLLBAR ) ;
encoderDir [ ENC_R ] . reset ( ) ;
}
}
void UI_func_epiano_pan_tremolo ( uint8_t param )
void UI_func_epiano_sound_intensity ( uint8_t param )
{
;
if ( LCDML . FUNC_setup ( ) ) // ****** SETUP *********
{
encoderDir [ ENC_R ] . reset ( ) ;
lcd_special_chars ( BLOCKBAR ) ;
lcd_display_bar_int ( " EPiano Level " , configuration . epiano . sound_intensity , 1.0 , EP_SOUND_INTENSITY_MIN , EP_SOUND_INTENSITY_MAX , 3 , false , false , true ) ;
}
void UI_func_epiano_pan_lfo ( uint8_t param )
if ( LCDML . FUNC_loop ( ) ) // ****** LOOP *********
{
;
if ( ( LCDML . BT_checkDown ( ) & & encoderDir [ ENC_R ] . Down ( ) ) | | ( LCDML . BT_checkUp ( ) & & encoderDir [ ENC_R ] . Up ( ) ) | | ( LCDML . BT_checkEnter ( ) & & encoderDir [ ENC_R ] . ButtonShort ( ) ) )
{
encoderDir [ ENC_R ] . reset ( ) ;
if ( LCDML . BT_checkDown ( ) )
{
configuration . epiano . sound_intensity = constrain ( configuration . epiano . sound_intensity + ENCODER [ ENC_R ] . speed ( ) , EP_SOUND_INTENSITY_MIN , EP_SOUND_INTENSITY_MAX ) ;
MD_sendControlChange ( configuration . epiano . midi_channel , 7 , configuration . epiano . sound_intensity ) ;
}
else if ( LCDML . BT_checkUp ( ) )
{
configuration . epiano . sound_intensity = constrain ( configuration . epiano . sound_intensity - ENCODER [ ENC_R ] . speed ( ) , EP_SOUND_INTENSITY_MIN , EP_SOUND_INTENSITY_MAX ) ;
MD_sendControlChange ( configuration . epiano . midi_channel , 7 , configuration . epiano . sound_intensity ) ;
}
}
void UI_func_epiano_overdrive ( uint8_t param )
lcd_display_bar_int ( " Voice Level " , configuration . epiano . sound_intensity , 1.0 , EP_SOUND_INTENSITY_MIN , EP_SOUND_INTENSITY_MAX , 3 , false , false , false ) ;
ep . setVolume ( mapfloat ( configuration . epiano . sound_intensity , EP_SOUND_INTENSITY_MIN , EP_SOUND_INTENSITY_MAX , 0 , 1.0 ) ) ;
}
if ( LCDML . FUNC_close ( ) ) // ****** STABLE END *********
{
;
lcd_special_chars ( SCROLLBAR ) ;
encoderDir [ ENC_R ] . reset ( ) ;
}
}
void UI_func_epiano_midi_channel ( uint8_t param )
void UI_func_epiano_panorama ( uint8_t param )
{
;
if ( LCDML . FUNC_setup ( ) ) // ****** SETUP *********
{
encoderDir [ ENC_R ] . reset ( ) ;
if ( configuration . sys . mono > 0 )
{
lcd . setCursor ( 0 , 0 ) ;
lcd . print ( F ( " EP Panorama " ) ) ;
lcd . setCursor ( 0 , 1 ) ;
lcd . print ( F ( " MONO-disabled " ) ) ;
return ;
}
void UI_func_epiano_lowest_note ( uint8_t param )
lcd_special_chars ( METERBAR ) ;
lcd_display_meter_float ( " EP Panorama " , configuration . epiano . pan , 0.05 , - 20.0 , EP_PANORAMA_MIN , EP_PANORAMA_MAX , 1 , 1 , false , true , true ) ;
}
if ( LCDML . FUNC_loop ( ) ) // ****** LOOP *********
{
;
if ( LCDML . BT_checkDown ( ) & & encoderDir [ ENC_R ] . Down ( ) & & configuration . sys . mono = = 0 )
{
configuration . dexed [ selected_instance_id ] . pan = constrain ( configuration . epiano . pan + ENCODER [ ENC_R ] . speed ( ) , EP_PANORAMA_MIN , EP_PANORAMA_MAX ) ;
MD_sendControlChange ( configuration . epiano . midi_channel , 10 , map ( configuration . epiano . pan , EP_PANORAMA_MIN , EP_PANORAMA_MAX , 0 , 127 ) ) ;
}
else if ( LCDML . BT_checkUp ( ) & & encoderDir [ ENC_R ] . Up ( ) & & configuration . sys . mono = = 0 )
{
configuration . epiano . pan = constrain ( configuration . epiano . pan - ENCODER [ ENC_R ] . speed ( ) , EP_PANORAMA_MIN , EP_PANORAMA_MAX ) ;
MD_sendControlChange ( configuration . epiano . midi_channel , 10 , map ( configuration . epiano . pan , EP_PANORAMA_MIN , EP_PANORAMA_MAX , 0 , 127 ) ) ;
}
void UI_func_epiano_highest_note ( uint8_t param )
if ( configuration . sys . mono = = 0 )
{
;
lcd_display_meter_float ( " EP Panorama " , configuration . epiano . pan , 0.05 , - 20.0 , EP_PANORAMA_MIN , EP_PANORAMA_MAX , 1 , 1 , false , true , false ) ;
//TODO //mono2stereo[selected_instance_id]->panorama(mapfloat(configuration.dexed[selected_instance_id].pan, PANORAMA_MIN, PANORAMA_MAX, -1.0, 1.0));
}
}
void UI_func_epiano_transpose ( uint8_t param )
if ( LCDML . FUNC_close ( ) ) // ****** STABLE END *********
{
;
lcd_special_chars ( SCROLLBAR ) ;
encoderDir [ ENC_R ] . reset ( ) ;
}
}
void UI_func_epiano_polyphon y ( uint8_t param )
void UI_func_epiano_deca y ( uint8_t param )
{
;
if ( LCDML . FUNC_setup ( ) ) // ****** SETUP *********
{
encoderDir [ ENC_R ] . reset ( ) ;
lcd_special_chars ( BLOCKBAR ) ;
lcd_display_bar_int ( " EPiano Decay " , configuration . epiano . decay , 1.0 , EP_DECAY_MIN , EP_DECAY_MAX , 3 , false , false , true ) ;
}
void UI_func_epiano_velocity_sense ( uint8_t param )
if ( LCDML . FUNC_loop ( ) ) // ****** LOOP *********
{
;
if ( ( LCDML . BT_checkDown ( ) & & encoderDir [ ENC_R ] . Down ( ) ) | | ( LCDML . BT_checkUp ( ) & & encoderDir [ ENC_R ] . Up ( ) ) | | ( LCDML . BT_checkEnter ( ) & & encoderDir [ ENC_R ] . ButtonShort ( ) ) )
{
encoderDir [ ENC_R ] . reset ( ) ;
if ( LCDML . BT_checkDown ( ) )
{
configuration . epiano . decay = constrain ( configuration . epiano . decay + ENCODER [ ENC_R ] . speed ( ) , EP_DECAY_MIN , EP_DECAY_MAX ) ;
}
else if ( LCDML . BT_checkUp ( ) )
{
configuration . epiano . decay = constrain ( configuration . epiano . decay - ENCODER [ ENC_R ] . speed ( ) , EP_DECAY_MIN , EP_DECAY_MAX ) ;
}
}
void UI_func_epiano_monopoly ( uint8_t param )
lcd_display_bar_int ( " EPiano Decay " , configuration . epiano . decay , 1.0 , EP_DECAY_MIN , EP_DECAY_MAX , 3 , false , false , false ) ;
ep . setDecay ( mapfloat ( configuration . epiano . decay , EP_DECAY_MIN , EP_DECAY_MAX , 0 , 1.0 ) ) ;
}
if ( LCDML . FUNC_close ( ) ) // ****** STABLE END *********
{
;
lcd_special_chars ( SCROLLBAR ) ;
encoderDir [ ENC_R ] . reset ( ) ;
}
}
void UI_func_epiano_release ( uint8_t param )
{
if ( LCDML . FUNC_setup ( ) ) // ****** SETUP *********
{
encoderDir [ ENC_R ] . reset ( ) ;
lcd_special_chars ( BLOCKBAR ) ;
lcd_display_bar_int ( " EPiano Release " , configuration . epiano . release , 1.0 , EP_RELEASE_MIN , EP_RELEASE_MAX , 3 , false , false , true ) ;
}
if ( LCDML . FUNC_loop ( ) ) // ****** LOOP *********
{
if ( ( LCDML . BT_checkDown ( ) & & encoderDir [ ENC_R ] . Down ( ) ) | | ( LCDML . BT_checkUp ( ) & & encoderDir [ ENC_R ] . Up ( ) ) | | ( LCDML . BT_checkEnter ( ) & & encoderDir [ ENC_R ] . ButtonShort ( ) ) )
{
encoderDir [ ENC_R ] . reset ( ) ;
if ( LCDML . BT_checkDown ( ) )
{
configuration . epiano . release = constrain ( configuration . epiano . release + ENCODER [ ENC_R ] . speed ( ) , EP_RELEASE_MIN , EP_RELEASE_MAX ) ;
}
else if ( LCDML . BT_checkUp ( ) )
{
configuration . epiano . decay = constrain ( configuration . epiano . decay - ENCODER [ ENC_R ] . speed ( ) , EP_DECAY_MIN , EP_DECAY_MAX ) ;
}
}
lcd_display_bar_int ( " EPiano Release " , configuration . epiano . release , 1.0 , EP_RELEASE_MIN , EP_RELEASE_MAX , 3 , false , false , false ) ;
ep . setRelease ( mapfloat ( configuration . epiano . release , EP_RELEASE_MIN , EP_RELEASE_MAX , 0 , 1.0 ) ) ;
}
if ( LCDML . FUNC_close ( ) ) // ****** STABLE END *********
{
lcd_special_chars ( SCROLLBAR ) ;
encoderDir [ ENC_R ] . reset ( ) ;
}
}
void UI_func_epiano_hardness ( uint8_t param )
{
if ( LCDML . FUNC_setup ( ) ) // ****** SETUP *********
{
encoderDir [ ENC_R ] . reset ( ) ;
lcd_special_chars ( BLOCKBAR ) ;
lcd_display_bar_int ( " EPiano Hardness " , configuration . epiano . hardness , 1.0 , EP_HARDNESS_MIN , EP_HARDNESS_MAX , 3 , false , false , true ) ;
}
if ( LCDML . FUNC_loop ( ) ) // ****** LOOP *********
{
if ( ( LCDML . BT_checkDown ( ) & & encoderDir [ ENC_R ] . Down ( ) ) | | ( LCDML . BT_checkUp ( ) & & encoderDir [ ENC_R ] . Up ( ) ) | | ( LCDML . BT_checkEnter ( ) & & encoderDir [ ENC_R ] . ButtonShort ( ) ) )
{
encoderDir [ ENC_R ] . reset ( ) ;
if ( LCDML . BT_checkDown ( ) )
{
configuration . epiano . hardness = constrain ( configuration . epiano . hardness + ENCODER [ ENC_R ] . speed ( ) , EP_HARDNESS_MIN , EP_HARDNESS_MAX ) ;
}
else if ( LCDML . BT_checkUp ( ) )
{
configuration . epiano . hardness = constrain ( configuration . epiano . hardness - ENCODER [ ENC_R ] . speed ( ) , EP_HARDNESS_MIN , EP_HARDNESS_MAX ) ;
}
}
lcd_display_bar_int ( " EPiano Hardness " , configuration . epiano . hardness , 1.0 , EP_HARDNESS_MIN , EP_HARDNESS_MAX , 3 , false , false , false ) ;
ep . setHardness ( mapfloat ( configuration . epiano . hardness , EP_HARDNESS_MIN , EP_HARDNESS_MAX , 0 , 1.0 ) ) ;
}
if ( LCDML . FUNC_close ( ) ) // ****** STABLE END *********
{
lcd_special_chars ( SCROLLBAR ) ;
encoderDir [ ENC_R ] . reset ( ) ;
}
}
void UI_func_epiano_treble ( uint8_t param )
{
if ( LCDML . FUNC_setup ( ) ) // ****** SETUP *********
{
encoderDir [ ENC_R ] . reset ( ) ;
lcd_special_chars ( BLOCKBAR ) ;
lcd_display_bar_int ( " EPiano Treble " , configuration . epiano . treble , 1.0 , EP_TREBLE_MIN , EP_TREBLE_MAX , 3 , false , false , true ) ;
}
if ( LCDML . FUNC_loop ( ) ) // ****** LOOP *********
{
if ( ( LCDML . BT_checkDown ( ) & & encoderDir [ ENC_R ] . Down ( ) ) | | ( LCDML . BT_checkUp ( ) & & encoderDir [ ENC_R ] . Up ( ) ) | | ( LCDML . BT_checkEnter ( ) & & encoderDir [ ENC_R ] . ButtonShort ( ) ) )
{
encoderDir [ ENC_R ] . reset ( ) ;
if ( LCDML . BT_checkDown ( ) )
{
configuration . epiano . treble = constrain ( configuration . epiano . treble + ENCODER [ ENC_R ] . speed ( ) , EP_TREBLE_MIN , EP_TREBLE_MAX ) ;
}
else if ( LCDML . BT_checkUp ( ) )
{
configuration . epiano . treble = constrain ( configuration . epiano . treble - ENCODER [ ENC_R ] . speed ( ) , EP_TREBLE_MIN , EP_TREBLE_MAX ) ;
}
}
lcd_display_bar_int ( " EPiano Treble " , configuration . epiano . treble , 1.0 , EP_TREBLE_MIN , EP_TREBLE_MAX , 3 , false , false , false ) ;
ep . setTreble ( mapfloat ( configuration . epiano . treble , EP_TREBLE_MIN , EP_TREBLE_MAX , 0 , 1.0 ) ) ;
}
if ( LCDML . FUNC_close ( ) ) // ****** STABLE END *********
{
lcd_special_chars ( SCROLLBAR ) ;
encoderDir [ ENC_R ] . reset ( ) ;
}
}
void UI_func_epiano_stereo ( uint8_t param )
{
if ( LCDML . FUNC_setup ( ) ) // ****** SETUP *********
{
encoderDir [ ENC_R ] . reset ( ) ;
lcd_special_chars ( BLOCKBAR ) ;
lcd_display_bar_int ( " EPiano Stereo " , configuration . epiano . stereo , 1.0 , EP_STEREO_MIN , EP_STEREO_MAX , 3 , false , false , true ) ;
}
if ( LCDML . FUNC_loop ( ) ) // ****** LOOP *********
{
if ( ( LCDML . BT_checkDown ( ) & & encoderDir [ ENC_R ] . Down ( ) ) | | ( LCDML . BT_checkUp ( ) & & encoderDir [ ENC_R ] . Up ( ) ) | | ( LCDML . BT_checkEnter ( ) & & encoderDir [ ENC_R ] . ButtonShort ( ) ) )
{
encoderDir [ ENC_R ] . reset ( ) ;
if ( LCDML . BT_checkDown ( ) )
{
configuration . epiano . stereo = constrain ( configuration . epiano . stereo + ENCODER [ ENC_R ] . speed ( ) , EP_STEREO_MIN , EP_STEREO_MAX ) ;
}
else if ( LCDML . BT_checkUp ( ) )
{
configuration . epiano . stereo = constrain ( configuration . epiano . stereo - ENCODER [ ENC_R ] . speed ( ) , EP_STEREO_MIN , EP_STEREO_MAX ) ;
}
}
lcd_display_bar_int ( " EPiano Stereo " , configuration . epiano . stereo , 1.0 , EP_STEREO_MIN , EP_STEREO_MAX , 3 , false , false , false ) ;
ep . setTreble ( mapfloat ( configuration . epiano . stereo , EP_STEREO_MIN , EP_STEREO_MAX , 0 , 1.0 ) ) ;
}
if ( LCDML . FUNC_close ( ) ) // ****** STABLE END *********
{
lcd_special_chars ( SCROLLBAR ) ;
encoderDir [ ENC_R ] . reset ( ) ;
}
}
void UI_func_epiano_tune ( uint8_t param )
{
if ( LCDML . FUNC_setup ( ) ) // ****** SETUP *********
{
encoderDir [ ENC_R ] . reset ( ) ;
lcd_special_chars ( METERBAR ) ;
lcd_display_meter_int ( " EPiano Tune " , configuration . epiano . tune , 1.0 , - 100.0 , EP_TUNE_MIN , EP_TUNE_MAX , 3 , false , true , true ) ;
}
if ( LCDML . FUNC_loop ( ) ) // ****** LOOP *********
{
if ( ( LCDML . BT_checkDown ( ) & & encoderDir [ ENC_R ] . Down ( ) ) | | ( LCDML . BT_checkUp ( ) & & encoderDir [ ENC_R ] . Up ( ) ) | | ( LCDML . BT_checkEnter ( ) & & encoderDir [ ENC_R ] . ButtonShort ( ) ) )
{
if ( LCDML . BT_checkDown ( ) )
{
configuration . epiano . tune = constrain ( configuration . epiano . tune + ENCODER [ ENC_R ] . speed ( ) , EP_TUNE_MIN , EP_TUNE_MAX ) ;
MD_sendControlChange ( configuration . epiano . midi_channel , 94 , configuration . epiano . tune ) ;
}
else if ( LCDML . BT_checkUp ( ) )
{
configuration . epiano . tune = constrain ( configuration . epiano . tune - ENCODER [ ENC_R ] . speed ( ) , EP_TUNE_MIN , EP_TUNE_MAX ) ;
MD_sendControlChange ( configuration . epiano . midi_channel , 94 , configuration . epiano . tune ) ;
}
}
lcd_display_meter_int ( " EPiano Tune " , configuration . epiano . tune , 1.0 , - 100.0 , EP_TUNE_MIN , EP_TUNE_MAX , 3 , false , true , false ) ;
ep . setTune ( ( configuration . epiano . tune - 100 ) / 100.0 ) ;
}
if ( LCDML . FUNC_close ( ) ) // ****** STABLE END *********
{
lcd_special_chars ( SCROLLBAR ) ;
encoderDir [ ENC_R ] . reset ( ) ;
}
}
void UI_func_epiano_detune ( uint8_t param )
{
if ( LCDML . FUNC_setup ( ) ) // ****** SETUP *********
{
encoderDir [ ENC_R ] . reset ( ) ;
lcd_special_chars ( BLOCKBAR ) ;
lcd_display_bar_int ( " EPiano Detune " , configuration . epiano . detune , 1.0 , EP_DETUNE_MIN , EP_DETUNE_MAX , 3 , false , false , true ) ;
}
if ( LCDML . FUNC_loop ( ) ) // ****** LOOP *********
{
if ( ( LCDML . BT_checkDown ( ) & & encoderDir [ ENC_R ] . Down ( ) ) | | ( LCDML . BT_checkUp ( ) & & encoderDir [ ENC_R ] . Up ( ) ) | | ( LCDML . BT_checkEnter ( ) & & encoderDir [ ENC_R ] . ButtonShort ( ) ) )
{
encoderDir [ ENC_R ] . reset ( ) ;
if ( LCDML . BT_checkDown ( ) )
{
configuration . epiano . detune = constrain ( configuration . epiano . detune + ENCODER [ ENC_R ] . speed ( ) , EP_DETUNE_MIN , EP_DETUNE_MAX ) ;
}
else if ( LCDML . BT_checkUp ( ) )
{
configuration . epiano . detune = constrain ( configuration . epiano . detune - ENCODER [ ENC_R ] . speed ( ) , EP_DETUNE_MIN , EP_DETUNE_MAX ) ;
}
}
lcd_display_bar_int ( " EPiano Detune " , configuration . epiano . detune , 1.0 , EP_DETUNE_MIN , EP_DETUNE_MAX , 3 , false , false , false ) ;
ep . setDetune ( mapfloat ( configuration . epiano . detune , EP_DETUNE_MIN , EP_DETUNE_MAX , 0 , 1.0 ) ) ;
}
if ( LCDML . FUNC_close ( ) ) // ****** STABLE END *********
{
lcd_special_chars ( SCROLLBAR ) ;
encoderDir [ ENC_R ] . reset ( ) ;
}
}
void UI_func_epiano_pan_tremolo ( uint8_t param )
{
if ( LCDML . FUNC_setup ( ) ) // ****** SETUP *********
{
encoderDir [ ENC_R ] . reset ( ) ;
lcd_special_chars ( BLOCKBAR ) ;
lcd_display_bar_int ( " EPiano PanTrem " , configuration . epiano . pan_tremolo , 1.0 , EP_PAN_TREMOLO_MIN , EP_PAN_TREMOLO_MAX , 3 , false , false , true ) ;
}
if ( LCDML . FUNC_loop ( ) ) // ****** LOOP *********
{
if ( ( LCDML . BT_checkDown ( ) & & encoderDir [ ENC_R ] . Down ( ) ) | | ( LCDML . BT_checkUp ( ) & & encoderDir [ ENC_R ] . Up ( ) ) | | ( LCDML . BT_checkEnter ( ) & & encoderDir [ ENC_R ] . ButtonShort ( ) ) )
{
encoderDir [ ENC_R ] . reset ( ) ;
if ( LCDML . BT_checkDown ( ) )
{
configuration . epiano . pan_tremolo = constrain ( configuration . epiano . pan_tremolo + ENCODER [ ENC_R ] . speed ( ) , EP_PAN_TREMOLO_MIN , EP_PAN_TREMOLO_MAX ) ;
}
else if ( LCDML . BT_checkUp ( ) )
{
configuration . epiano . pan_tremolo = constrain ( configuration . epiano . pan_tremolo - ENCODER [ ENC_R ] . speed ( ) , EP_PAN_TREMOLO_MIN , EP_PAN_TREMOLO_MAX ) ;
}
}
lcd_display_bar_int ( " EPiano PanTrem " , configuration . epiano . pan_tremolo , 1.0 , EP_PAN_TREMOLO_MIN , EP_PAN_TREMOLO_MAX , 3 , false , false , false ) ;
ep . setPanTremolo ( mapfloat ( configuration . epiano . pan_tremolo , EP_PAN_TREMOLO_MIN , EP_PAN_TREMOLO_MAX , 0 , 1.0 ) ) ;
}
if ( LCDML . FUNC_close ( ) ) // ****** STABLE END *********
{
lcd_special_chars ( SCROLLBAR ) ;
encoderDir [ ENC_R ] . reset ( ) ;
}
}
void UI_func_epiano_pan_lfo ( uint8_t param )
{
if ( LCDML . FUNC_setup ( ) ) // ****** SETUP *********
{
encoderDir [ ENC_R ] . reset ( ) ;
lcd_special_chars ( BLOCKBAR ) ;
lcd_display_bar_int ( " EPiano PanLFO " , configuration . epiano . pan_lfo , 1.0 , EP_PAN_LFO_MIN , EP_PAN_LFO_MAX , 3 , false , false , true ) ;
}
if ( LCDML . FUNC_loop ( ) ) // ****** LOOP *********
{
if ( ( LCDML . BT_checkDown ( ) & & encoderDir [ ENC_R ] . Down ( ) ) | | ( LCDML . BT_checkUp ( ) & & encoderDir [ ENC_R ] . Up ( ) ) | | ( LCDML . BT_checkEnter ( ) & & encoderDir [ ENC_R ] . ButtonShort ( ) ) )
{
encoderDir [ ENC_R ] . reset ( ) ;
if ( LCDML . BT_checkDown ( ) )
{
configuration . epiano . pan_lfo = constrain ( configuration . epiano . pan_lfo + ENCODER [ ENC_R ] . speed ( ) , EP_PAN_LFO_MIN , EP_PAN_LFO_MAX ) ;
}
else if ( LCDML . BT_checkUp ( ) )
{
configuration . epiano . pan_lfo = constrain ( configuration . epiano . pan_lfo - ENCODER [ ENC_R ] . speed ( ) , EP_PAN_LFO_MIN , EP_PAN_LFO_MAX ) ;
}
}
lcd_display_bar_int ( " EPiano PanLFO " , configuration . epiano . pan_lfo , 1.0 , EP_PAN_LFO_MIN , EP_PAN_LFO_MAX , 3 , false , false , false ) ;
ep . setPanLFO ( mapfloat ( configuration . epiano . pan_lfo , EP_PAN_LFO_MIN , EP_PAN_LFO_MAX , 0 , 1.0 ) ) ;
}
if ( LCDML . FUNC_close ( ) ) // ****** STABLE END *********
{
lcd_special_chars ( SCROLLBAR ) ;
encoderDir [ ENC_R ] . reset ( ) ;
}
}
void UI_func_epiano_overdrive ( uint8_t param )
{
if ( LCDML . FUNC_setup ( ) ) // ****** SETUP *********
{
encoderDir [ ENC_R ] . reset ( ) ;
lcd_special_chars ( BLOCKBAR ) ;
lcd_display_bar_int ( " EPiano Overdrive " , configuration . epiano . overdrive , 1.0 , EP_OVERDRIVE_MIN , EP_OVERDRIVE_MAX , 3 , false , false , true ) ;
}
if ( LCDML . FUNC_loop ( ) ) // ****** LOOP *********
{
if ( ( LCDML . BT_checkDown ( ) & & encoderDir [ ENC_R ] . Down ( ) ) | | ( LCDML . BT_checkUp ( ) & & encoderDir [ ENC_R ] . Up ( ) ) | | ( LCDML . BT_checkEnter ( ) & & encoderDir [ ENC_R ] . ButtonShort ( ) ) )
{
encoderDir [ ENC_R ] . reset ( ) ;
if ( LCDML . BT_checkDown ( ) )
{
configuration . epiano . overdrive = constrain ( configuration . epiano . overdrive + ENCODER [ ENC_R ] . speed ( ) , EP_OVERDRIVE_MIN , EP_OVERDRIVE_MAX ) ;
}
else if ( LCDML . BT_checkUp ( ) )
{
configuration . epiano . overdrive = constrain ( configuration . epiano . overdrive - ENCODER [ ENC_R ] . speed ( ) , EP_OVERDRIVE_MIN , EP_OVERDRIVE_MAX ) ;
}
}
lcd_display_bar_int ( " EPiano Overdrive " , configuration . epiano . overdrive , 1.0 , EP_OVERDRIVE_MIN , EP_OVERDRIVE_MAX , 3 , false , false , false ) ;
ep . setOverdrive ( mapfloat ( configuration . epiano . overdrive , EP_OVERDRIVE_MIN , EP_OVERDRIVE_MAX , 0 , 1.0 ) ) ;
}
if ( LCDML . FUNC_close ( ) ) // ****** STABLE END *********
{
lcd_special_chars ( SCROLLBAR ) ;
encoderDir [ ENC_R ] . reset ( ) ;
}
}
void UI_func_epiano_transpose ( uint8_t param )
{
if ( LCDML . FUNC_setup ( ) ) // ****** SETUP *********
{
encoderDir [ ENC_R ] . reset ( ) ;
lcd_special_chars ( METERBAR ) ;
lcd_display_meter_int ( " EP Transpose " , configuration . epiano . transpose , 1.0 , 0.0 , EP_TRANSPOSE_MIN , EP_TRANSPOSE_MAX , 2 , false , true , true ) ;
}
if ( LCDML . FUNC_loop ( ) ) // ****** LOOP *********
{
if ( ( LCDML . BT_checkDown ( ) & & encoderDir [ ENC_R ] . Down ( ) ) | | ( LCDML . BT_checkUp ( ) & & encoderDir [ ENC_R ] . Up ( ) ) | | ( LCDML . BT_checkEnter ( ) & & encoderDir [ ENC_R ] . ButtonShort ( ) ) )
{
if ( LCDML . BT_checkDown ( ) )
configuration . epiano . transpose = constrain ( configuration . epiano . transpose + ENCODER [ ENC_R ] . speed ( ) , EP_TRANSPOSE_MIN , EP_TRANSPOSE_MAX ) ;
else if ( LCDML . BT_checkUp ( ) )
configuration . epiano . transpose = constrain ( configuration . epiano . transpose - ENCODER [ ENC_R ] . speed ( ) , EP_TRANSPOSE_MIN , EP_TRANSPOSE_MAX ) ;
}
lcd_display_meter_int ( " EP Transpose " , configuration . dexed [ selected_instance_id ] . transpose , 1.0 , 0.0 , EP_TRANSPOSE_MIN , EP_TRANSPOSE_MAX , 2 , false , true , true ) ;
}
if ( LCDML . FUNC_close ( ) ) // ****** STABLE END *********
{
lcd_special_chars ( SCROLLBAR ) ;
encoderDir [ ENC_R ] . reset ( ) ;
}
}
void UI_func_epiano_polyphony ( uint8_t param )
{
if ( LCDML . FUNC_setup ( ) ) // ****** SETUP *********
{
encoderDir [ ENC_R ] . reset ( ) ;
lcd_special_chars ( BLOCKBAR ) ;
lcd_display_bar_int ( " EP Polyphony " , configuration . epiano . polyphony , 1.0 , EP_POLYPHONY_MIN , EP_POLYPHONY_MAX , 2 , false , false , true ) ;
}
if ( LCDML . FUNC_loop ( ) ) // ****** LOOP *********
{
if ( ( LCDML . BT_checkDown ( ) & & encoderDir [ ENC_R ] . Down ( ) ) | | ( LCDML . BT_checkUp ( ) & & encoderDir [ ENC_R ] . Up ( ) ) | | ( LCDML . BT_checkEnter ( ) & & encoderDir [ ENC_R ] . ButtonShort ( ) ) )
{
if ( LCDML . BT_checkDown ( ) )
{
configuration . epiano . polyphony = constrain ( configuration . epiano . polyphony + 1 , EP_POLYPHONY_MIN , EP_POLYPHONY_MAX ) ;
}
else if ( LCDML . BT_checkUp ( ) )
{
if ( configuration . epiano . polyphony - 1 < 0 )
configuration . epiano . polyphony = 0 ;
else
{
configuration . epiano . polyphony = constrain ( configuration . epiano . polyphony - 1 , EP_POLYPHONY_MIN , EP_POLYPHONY_MAX ) ;
}
}
}
lcd_display_bar_int ( " EP Polyphony " , configuration . epiano . polyphony , 1.0 , EP_POLYPHONY_MIN , EP_POLYPHONY_MAX , 2 , false , false , false ) ;
ep . setPolyphony ( configuration . epiano . polyphony ) ;
}
if ( LCDML . FUNC_close ( ) ) // ****** STABLE END *********
{
lcd_special_chars ( SCROLLBAR ) ;
encoderDir [ ENC_R ] . reset ( ) ;
}
}
void UI_func_epiano_velocity_sense ( uint8_t param )
{
if ( LCDML . FUNC_setup ( ) ) // ****** SETUP *********
{
encoderDir [ ENC_R ] . reset ( ) ;
lcd_special_chars ( BLOCKBAR ) ;
lcd_display_bar_int ( " EPiano VelSense " , configuration . epiano . velocity_sense , 1.0 , EP_VELOCITY_SENSE_MIN , EP_VELOCITY_SENSE_MAX , 3 , false , false , true ) ;
}
if ( LCDML . FUNC_loop ( ) ) // ****** LOOP *********
{
if ( ( LCDML . BT_checkDown ( ) & & encoderDir [ ENC_R ] . Down ( ) ) | | ( LCDML . BT_checkUp ( ) & & encoderDir [ ENC_R ] . Up ( ) ) | | ( LCDML . BT_checkEnter ( ) & & encoderDir [ ENC_R ] . ButtonShort ( ) ) )
{
encoderDir [ ENC_R ] . reset ( ) ;
if ( LCDML . BT_checkDown ( ) )
{
configuration . epiano . velocity_sense = constrain ( configuration . epiano . velocity_sense + ENCODER [ ENC_R ] . speed ( ) , EP_VELOCITY_SENSE_MIN , EP_VELOCITY_SENSE_MAX ) ;
}
else if ( LCDML . BT_checkUp ( ) )
{
configuration . epiano . velocity_sense = constrain ( configuration . epiano . velocity_sense - ENCODER [ ENC_R ] . speed ( ) , EP_VELOCITY_SENSE_MIN , EP_VELOCITY_SENSE_MAX ) ;
}
}
lcd_display_bar_int ( " EPiano VelSense " , configuration . epiano . velocity_sense , 1.0 , EP_VELOCITY_SENSE_MIN , EP_VELOCITY_SENSE_MAX , 3 , false , false , false ) ;
ep . setOverdrive ( mapfloat ( configuration . epiano . velocity_sense , EP_VELOCITY_SENSE_MIN , EP_VELOCITY_SENSE_MAX , 0 , 1.0 ) ) ;
}
if ( LCDML . FUNC_close ( ) ) // ****** STABLE END *********
{
lcd_special_chars ( SCROLLBAR ) ;
encoderDir [ ENC_R ] . reset ( ) ;
}
}
void UI_func_stereo_mono ( uint8_t param )