@ -34,13 +34,16 @@
# ifdef USE_ONBOARD_USB_HOST
# ifdef USE_ONBOARD_USB_HOST
# include <USBHost_t36.h>
# include <USBHost_t36.h>
# endif
# endif
# ifndef MASTER_KEY_MIDI // selecting sounds by encoder, button and display
# ifdef MASTER_BUTTON_PIN
# include <Bounce.h>
# endif
# if !defined(MASTER_KEY_MIDI) || !defined(MASTER_BUTTON_PIN) // selecting sounds by encoder, button and display
# include <Bounce.h>
# include <Bounce.h>
# include <Encoder.h>
# include <Encoder.h>
# include <LiquidCrystalPlus_I2C.h>
# include <LiquidCrystalPlus_I2C.h>
# endif
# endif
# ifndef MASTER_KEY_MIDI
# if !defined(MASTER_KEY_MIDI) || !defined(MASTER_BUTTON_PIN)
// [I2C] SCL: Pin 19, SDA: Pin 18 (https://www.pjrc.com/teensy/td_libs_Wire.html)
// [I2C] SCL: Pin 19, SDA: Pin 18 (https://www.pjrc.com/teensy/td_libs_Wire.html)
# define LCD_I2C_ADDRESS 0x3f
# define LCD_I2C_ADDRESS 0x3f
# define LCD_CHARS 20
# define LCD_CHARS 20
@ -50,14 +53,23 @@ Encoder enc1(ENC1_PIN_A, ENC1_PIN_B);
Bounce but1 = Bounce ( BUT1_PIN , 10 ) ; // 10 ms debounce
Bounce but1 = Bounce ( BUT1_PIN , 10 ) ; // 10 ms debounce
# endif
# endif
# ifdef MASTER_BUTTON_PIN
Bounce master_key = Bounce ( MASTER_BUTTON_PIN , 10 ) ; // 10 ms debounce
# endif
// GUItool: begin automatically generated code
// GUItool: begin automatically generated code
AudioPlayQueue queue1 ; //xy=84,294
AudioPlayQueue queue1 ; //xy=335,318
AudioOutputI2S i2s1 ; //xy=961,276
AudioAmplifier amp1 ; //xy=873,270
AudioConnection patchCord2 ( queue1 , 0 , i2s1 , 0 ) ;
AudioAmplifier amp2 ; //xy=876,319
AudioConnection patchCord3 ( queue1 , 0 , i2s1 , 1 ) ;
AudioOutputI2S i2s1 ; //xy=1212,300
AudioControlSGTL5000 sgtl5000_1 ; //xy=507,403
AudioConnection patchCord1 ( queue1 , amp1 ) ;
AudioConnection patchCord2 ( queue1 , amp2 ) ;
AudioConnection patchCord3 ( amp1 , 0 , i2s1 , 0 ) ;
AudioConnection patchCord4 ( amp2 , 0 , i2s1 , 1 ) ;
AudioControlSGTL5000 sgtl5000_1 ; //xy=758,427
// GUItool: end automatically generated code
// GUItool: end automatically generated code
Dexed * dexed = new Dexed ( SAMPLE_RATE ) ;
Dexed * dexed = new Dexed ( SAMPLE_RATE ) ;
bool sd_card_available = false ;
bool sd_card_available = false ;
uint8_t bank = EEPROM . read ( EEPROM_BANK_ADDR ) ;
uint8_t bank = EEPROM . read ( EEPROM_BANK_ADDR ) ;
@ -65,7 +77,7 @@ uint8_t midi_channel = DEFAULT_MIDI_CHANNEL;
uint32_t xrun = 0 ;
uint32_t xrun = 0 ;
uint32_t overload = 0 ;
uint32_t overload = 0 ;
# ifdef MASTER_KEY_MIDI
# if defined(MASTER_KEY_MIDI) || defined(MASTER_BUTTON_PIN)
bool master_key_enabled = false ;
bool master_key_enabled = false ;
# endif
# endif
@ -93,7 +105,7 @@ void setup()
Serial . begin ( SERIAL_SPEED ) ;
Serial . begin ( SERIAL_SPEED ) ;
delay ( 200 ) ;
delay ( 200 ) ;
# ifndef MASTER_KEY_MIDI
# if !defined(MASTER_KEY_MIDI) && !defined(MASTER_BUTTON_PIN)
lcd . init ( ) ;
lcd . init ( ) ;
lcd . blink_off ( ) ;
lcd . blink_off ( ) ;
lcd . cursor_off ( ) ;
lcd . cursor_off ( ) ;
@ -125,6 +137,8 @@ void setup()
AudioMemory ( AUDIO_MEM ) ;
AudioMemory ( AUDIO_MEM ) ;
sgtl5000_1 . enable ( ) ;
sgtl5000_1 . enable ( ) ;
sgtl5000_1 . volume ( VOLUME ) ;
sgtl5000_1 . volume ( VOLUME ) ;
amp1 . gain ( 1.0 ) ;
amp2 . gain ( 1.0 ) ;
// start SD card
// start SD card
SPI . setMOSI ( SDCARD_MOSI_PIN ) ;
SPI . setMOSI ( SDCARD_MOSI_PIN ) ;
@ -167,6 +181,10 @@ void setup()
cpu_mem_millis = 0 ;
cpu_mem_millis = 0 ;
# endif
# endif
# ifdef MASTER_BUTTON_PIN
pinMode ( MASTER_BUTTON_PIN , INPUT_PULLUP ) ;
# endif
# ifdef TEST_NOTE
# ifdef TEST_NOTE
//dexed->data[DEXED_VOICE_OFFSET+DEXED_LFO_PITCH_MOD_DEP] = 99; // full pitch mod depth
//dexed->data[DEXED_VOICE_OFFSET+DEXED_LFO_PITCH_MOD_DEP] = 99; // full pitch mod depth
//dexed->data[DEXED_VOICE_OFFSET+DEXED_LFO_PITCH_MOD_SENS] = 99; // full pitch mod sense
//dexed->data[DEXED_VOICE_OFFSET+DEXED_LFO_PITCH_MOD_SENS] = 99; // full pitch mod sense
@ -196,6 +214,23 @@ void loop()
}
}
# endif
# endif
# if MASTER_BUTTON_PIN
if ( master_key . update ( ) )
{
if ( master_key . fallingEdge ( ) )
{
master_key_enabled = true ;
dexed - > notesOff ( ) ;
Serial . println ( F ( " Master key enabled " ) ) ;
}
else if ( master_key . risingEdge ( ) )
{
master_key_enabled = false ;
Serial . println ( F ( " Master key disabled " ) ) ;
}
}
# endif
handle_input ( ) ;
handle_input ( ) ;
audio_buffer = queue1 . getBuffer ( ) ;
audio_buffer = queue1 . getBuffer ( ) ;
@ -251,7 +286,7 @@ void handle_input(void)
}
}
# endif
# endif
# ifndef MASTER_KEY_MIDI
# if !defined(MASTER_KEY_MIDI) && !defined(MASTER_BUTTON_PIN)
int enc1_val = enc1 . read ( ) ;
int enc1_val = enc1 . read ( ) ;
if ( but1 . update ( ) )
if ( but1 . update ( ) )
@ -333,7 +368,7 @@ void print_midi_event(uint8_t type, uint8_t data1, uint8_t data2)
# endif
# endif
# endif
# endif
# ifdef MASTER_KEY_MIDI
# if defined(MASTER_KEY_MIDI) || defined(MASTER_BUTTON_PIN)
bool handle_master_key ( uint8_t data )
bool handle_master_key ( uint8_t data )
{
{
int8_t num = num_key_base_c ( data ) ;
int8_t num = num_key_base_c ( data ) ;
@ -428,6 +463,8 @@ bool queue_midi_event(uint8_t type, uint8_t data1, uint8_t data2)
}
}
else
else
{
{
# endif
# if defined(MASTER_KEY_MIDI) || defined(MASTER_BUTTON_PIN)
if ( master_key_enabled )
if ( master_key_enabled )
{
{
if ( type = = 0x80 ) // handle when note is released
if ( type = = 0x80 ) // handle when note is released
@ -436,14 +473,14 @@ bool queue_midi_event(uint8_t type, uint8_t data1, uint8_t data2)
else
else
# endif
# endif
ret = dexed - > processMidiMessage ( type , data1 , data2 ) ;
ret = dexed - > processMidiMessage ( type , data1 , data2 ) ;
# if defined(MASTER_KEY_MIDI)
# ifdef MASTER_KEY_MIDI
}
}
# endif
# endif
return ( ret ) ;
return ( ret ) ;
}
}
# ifdef MASTER_KEY_MIDI
# if defined(MASTER_KEY_MIDI) || defined(MASTER_BUTTON_PIN)
int8_t num_key_base_c ( uint8_t midi_note )
int8_t num_key_base_c ( uint8_t midi_note )
{
{
int8_t num = 0 ;
int8_t num = 0 ;