|
|
|
@ -390,13 +390,13 @@ void setup() |
|
|
|
|
{ |
|
|
|
|
// read all bank names
|
|
|
|
|
max_loaded_banks = get_bank_names(instance_id); |
|
|
|
|
strip_extension(bank_names[instance_id][configuration.dexed[instance_id].bank], bank_name[instance_id]); |
|
|
|
|
strip_extension(bank_names[instance_id][configuration.performance.bank[instance_id]], bank_name[instance_id]); |
|
|
|
|
|
|
|
|
|
// read all voice name for actual bank
|
|
|
|
|
get_voice_names_from_bank(configuration.dexed[instance_id].bank, instance_id); |
|
|
|
|
get_voice_names_from_bank(configuration.performance.bank[instance_id], instance_id); |
|
|
|
|
#ifdef DEBUG |
|
|
|
|
Serial.print(F("Bank [")); |
|
|
|
|
Serial.print(bank_names[instance_id][configuration.dexed[instance_id].bank]); |
|
|
|
|
Serial.print(bank_names[instance_id][configuration.performance.bank[instance_id]]); |
|
|
|
|
Serial.print(F("/")); |
|
|
|
|
Serial.print(bank_name[instance_id]); |
|
|
|
|
Serial.println(F("]")); |
|
|
|
@ -413,7 +413,7 @@ void setup() |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
// load default SYSEX data
|
|
|
|
|
load_sd_voice(configuration.dexed[instance_id].bank, configuration.dexed[instance_id].voice, instance_id); |
|
|
|
|
load_sd_voice(configuration.performance.bank[instance_id], configuration.performance.voice[instance_id], instance_id); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -559,9 +559,9 @@ void setup() |
|
|
|
|
Serial.print(instance_id); |
|
|
|
|
Serial.println(F(":")); |
|
|
|
|
Serial.print(F("Bank/Voice from EEPROM [")); |
|
|
|
|
Serial.print(configuration.dexed[instance_id].bank, DEC); |
|
|
|
|
Serial.print(configuration.performance.bank[instance_id], DEC); |
|
|
|
|
Serial.print(F("/")); |
|
|
|
|
Serial.print(configuration.dexed[instance_id].voice, DEC); |
|
|
|
|
Serial.print(configuration.performance.voice[instance_id], DEC); |
|
|
|
|
Serial.println(F("]")); |
|
|
|
|
Serial.print(F("Polyphony: ")); |
|
|
|
|
Serial.println(configuration.dexed[instance_id].polyphony, DEC); |
|
|
|
@ -708,7 +708,7 @@ void handleControlChange(byte inChannel, byte inCtrl, byte inValue) |
|
|
|
|
case 0: |
|
|
|
|
if (inValue < MAX_BANKS - 1) |
|
|
|
|
{ |
|
|
|
|
configuration.dexed[instance_id].bank = inValue; |
|
|
|
|
configuration.performance.bank[instance_id] = inValue; |
|
|
|
|
eeprom_write(); |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
@ -763,7 +763,7 @@ void handleControlChange(byte inChannel, byte inCtrl, byte inValue) |
|
|
|
|
#ifdef DEBUG |
|
|
|
|
Serial.println(F("BANK-SELECT CC")); |
|
|
|
|
#endif |
|
|
|
|
configuration.dexed[instance_id].bank = inValue; |
|
|
|
|
configuration.performance.bank[instance_id] = inValue; |
|
|
|
|
eeprom_write(); |
|
|
|
|
break; |
|
|
|
|
case 64: |
|
|
|
@ -871,7 +871,7 @@ void handleProgramChange(byte inChannel, byte inProgram) |
|
|
|
|
#ifdef DISPLAY_LCD_SPI |
|
|
|
|
change_disp_sd(false); |
|
|
|
|
#endif |
|
|
|
|
load_sd_voice(configuration.dexed[instance_id].bank, inProgram, instance_id); |
|
|
|
|
load_sd_voice(configuration.performance.bank[instance_id], inProgram, instance_id); |
|
|
|
|
#ifdef DISPLAY_LCD_SPI |
|
|
|
|
change_disp_sd(true); |
|
|
|
|
#endif |
|
|
|
@ -1266,6 +1266,8 @@ void initial_values_from_eeprom(bool init) |
|
|
|
|
|
|
|
|
|
eeprom_get_sys(); |
|
|
|
|
eeprom_get_fx(); |
|
|
|
|
eeprom_get_performance(); |
|
|
|
|
|
|
|
|
|
for (uint8_t i = 0; i < NUM_DEXED; i++) |
|
|
|
|
eeprom_get_dexed(i); |
|
|
|
|
|
|
|
|
@ -1341,8 +1343,8 @@ void check_configuration(void) |
|
|
|
|
for (uint8_t instance_id = 0; instance_id < NUM_DEXED; instance_id++) |
|
|
|
|
{ |
|
|
|
|
configuration.dexed[instance_id].midi_channel = constrain(configuration.dexed[instance_id].midi_channel, MIDI_CHANNEL_MIN, MIDI_CHANNEL_MAX); |
|
|
|
|
configuration.dexed[instance_id].bank = constrain(configuration.dexed[instance_id].bank, 0, MAX_BANKS - 1); |
|
|
|
|
configuration.dexed[instance_id].voice = constrain(configuration.dexed[instance_id].voice, 0, MAX_VOICES - 1); |
|
|
|
|
configuration.performance.bank[instance_id] = constrain(configuration.performance.bank[instance_id], 0, MAX_BANKS - 1); |
|
|
|
|
configuration.performance.voice[instance_id] = constrain(configuration.performance.voice[instance_id], 0, MAX_VOICES - 1); |
|
|
|
|
configuration.dexed[instance_id].lowest_note = constrain(configuration.dexed[instance_id].lowest_note, INSTANCE_LOWEST_NOTE_MIN, INSTANCE_LOWEST_NOTE_MAX); |
|
|
|
|
configuration.dexed[instance_id].highest_note = constrain(configuration.dexed[instance_id].highest_note, INSTANCE_HIGHEST_NOTE_MIN, INSTANCE_HIGHEST_NOTE_MAX); |
|
|
|
|
configuration.dexed[instance_id].reverb_send = constrain(configuration.dexed[instance_id].reverb_send, REVERB_SEND_MIN, REVERB_SEND_MAX); |
|
|
|
@ -1397,6 +1399,8 @@ void init_configuration(void) |
|
|
|
|
configuration.sys.instances = INSTANCES_DEFAULT; |
|
|
|
|
configuration.sys.vol = VOLUME_DEFAULT; |
|
|
|
|
configuration.sys.mono = MONO_DEFAULT; |
|
|
|
|
configuration.sys.soft_midi_thru = SOFT_MIDI_THRU_DEFAULT; |
|
|
|
|
|
|
|
|
|
configuration.fx.checksum = 0xffff; |
|
|
|
|
configuration.fx.reverb_roomsize = REVERB_ROOMSIZE_DEFAULT; |
|
|
|
|
configuration.fx.reverb_damping = REVERB_DAMPING_DEFAULT; |
|
|
|
@ -1408,14 +1412,16 @@ void init_configuration(void) |
|
|
|
|
configuration.fx.delay_time = DELAY_TIME_DEFAULT / 10; |
|
|
|
|
configuration.fx.delay_feedback = DELAY_FEEDBACK_DEFAULT; |
|
|
|
|
configuration.fx.delay_level = DELAY_LEVEL_DEFAULT; |
|
|
|
|
configuration.sys.soft_midi_thru = SOFT_MIDI_THRU_DEFAULT; |
|
|
|
|
|
|
|
|
|
configuration.performance.checksum = 0xffff; |
|
|
|
|
configuration.performance.fx_number = 0; |
|
|
|
|
|
|
|
|
|
for (uint8_t instance_id = 0; instance_id < NUM_DEXED; instance_id++) |
|
|
|
|
{ |
|
|
|
|
configuration.dexed[instance_id].checksum = 0xffff; |
|
|
|
|
configuration.dexed[instance_id].midi_channel = DEFAULT_MIDI_CHANNEL; |
|
|
|
|
configuration.dexed[instance_id].bank = SYSEXBANK_DEFAULT; |
|
|
|
|
configuration.dexed[instance_id].voice = SYSEXSOUND_DEFAULT; |
|
|
|
|
configuration.performance.bank[instance_id] = SYSEXBANK_DEFAULT; |
|
|
|
|
configuration.performance.voice[instance_id] = SYSEXSOUND_DEFAULT; |
|
|
|
|
configuration.dexed[instance_id].lowest_note = INSTANCE_LOWEST_NOTE_MIN; |
|
|
|
|
configuration.dexed[instance_id].highest_note = INSTANCE_HIGHEST_NOTE_MAX; |
|
|
|
|
configuration.dexed[instance_id].reverb_send = REVERB_SEND_DEFAULT; |
|
|
|
@ -1427,7 +1433,12 @@ void init_configuration(void) |
|
|
|
|
configuration.dexed[instance_id].pan = PANORAMA_DEFAULT; |
|
|
|
|
configuration.dexed[instance_id].transpose = TRANSPOSE_DEFAULT; |
|
|
|
|
configuration.dexed[instance_id].tune = TUNE_DEFAULT; |
|
|
|
|
|
|
|
|
|
if (instance_id == 0) |
|
|
|
|
configuration.dexed[instance_id].polyphony = POLYPHONY_DEFAULT; |
|
|
|
|
else |
|
|
|
|
configuration.dexed[instance_id].polyphony = 0; |
|
|
|
|
|
|
|
|
|
configuration.dexed[instance_id].velocity_level = VELOCITY_LEVEL_DEFAULT; |
|
|
|
|
configuration.dexed[instance_id].engine = ENGINE_DEFAULT; |
|
|
|
|
configuration.dexed[instance_id].monopoly = MONOPOLY_DEFAULT; |
|
|
|
@ -1450,12 +1461,18 @@ void init_configuration(void) |
|
|
|
|
configuration.dexed[instance_id].portamento_glissando = PORTAMENTO_GLISSANDO_DEFAULT; |
|
|
|
|
configuration.dexed[instance_id].portamento_time = PORTAMENTO_TIME_DEFAULT; |
|
|
|
|
configuration.dexed[instance_id].op_enabled = OP_ENABLED_DEFAULT; |
|
|
|
|
|
|
|
|
|
configuration.performance.bank[instance_id] = SYSEXBANK_DEFAULT; |
|
|
|
|
configuration.performance.voice[instance_id] = SYSEXSOUND_DEFAULT; |
|
|
|
|
|
|
|
|
|
MicroDexed[instance_id]->controllers.refresh(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
set_volume(configuration.sys.vol, configuration.sys.mono); |
|
|
|
|
eeprom_update_sys(); |
|
|
|
|
eeprom_update_fx(); |
|
|
|
|
eeprom_update_performance(); |
|
|
|
|
|
|
|
|
|
for (uint8_t i = 0; i < NUM_DEXED; i++) |
|
|
|
|
eeprom_update_dexed(i); |
|
|
|
|
} |
|
|
|
@ -1478,8 +1495,7 @@ void eeprom_update_sys(void) |
|
|
|
|
configuration.sys.checksum = crc32((byte*)&configuration.sys + 4, sizeof(configuration.sys) - 4); |
|
|
|
|
EEPROM.put(EEPROM_SYS_START_ADDRESS, configuration.sys); |
|
|
|
|
#ifdef DEBUG |
|
|
|
|
Serial.println(F("Updating EEPROM sys")); |
|
|
|
|
show_configuration(); |
|
|
|
|
Serial.println(F("Updating EEPROM sys.")); |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -1501,7 +1517,6 @@ bool eeprom_get_sys(void) |
|
|
|
|
{ |
|
|
|
|
#ifdef DEBUG |
|
|
|
|
Serial.print(F("EEPROM sys loaded.")); |
|
|
|
|
show_configuration(); |
|
|
|
|
#endif |
|
|
|
|
return (true); |
|
|
|
|
} |
|
|
|
@ -1512,8 +1527,7 @@ void eeprom_update_fx(void) |
|
|
|
|
configuration.fx.checksum = crc32((byte*)&configuration.fx + 4, sizeof(configuration.fx) - 4); |
|
|
|
|
EEPROM.put(EEPROM_FX_START_ADDRESS, configuration.fx); |
|
|
|
|
#ifdef DEBUG |
|
|
|
|
Serial.println(F("Updating EEPROM fx")); |
|
|
|
|
show_configuration(); |
|
|
|
|
Serial.println(F("Updating EEPROM fx.")); |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1533,7 +1547,6 @@ bool eeprom_get_fx(void) |
|
|
|
|
{ |
|
|
|
|
#ifdef DEBUG |
|
|
|
|
Serial.print(F("EEPROM fx loaded.")); |
|
|
|
|
show_configuration(); |
|
|
|
|
#endif |
|
|
|
|
return (true); |
|
|
|
|
} |
|
|
|
@ -1546,8 +1559,7 @@ void eeprom_update_dexed(uint8_t instance_id) |
|
|
|
|
#ifdef DEBUG |
|
|
|
|
Serial.print(F("Updating EEPROM dexed (instance ")); |
|
|
|
|
Serial.print(instance_id); |
|
|
|
|
Serial.println(F(")")); |
|
|
|
|
show_configuration(); |
|
|
|
|
Serial.println(F(").")); |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1571,7 +1583,36 @@ bool eeprom_get_dexed(uint8_t instance_id) |
|
|
|
|
Serial.print(F("EEPROM dexed (instance ")); |
|
|
|
|
Serial.print(instance_id); |
|
|
|
|
Serial.println(F(") loaded.")); |
|
|
|
|
show_configuration(); |
|
|
|
|
#endif |
|
|
|
|
return (true); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void eeprom_update_performance() |
|
|
|
|
{ |
|
|
|
|
configuration.performance.checksum = crc32((byte*)&configuration.performance + 4, sizeof(configuration.performance) - 4); |
|
|
|
|
EEPROM.put(EEPROM_PERFORMANCE_START_ADDRESS, configuration.performance); |
|
|
|
|
#ifdef DEBUG |
|
|
|
|
Serial.println(F("Updating EEPROM performance.")); |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool eeprom_get_performance() |
|
|
|
|
{ |
|
|
|
|
EEPROM.get(EEPROM_PERFORMANCE_START_ADDRESS, configuration.performance); |
|
|
|
|
uint32_t checksum = crc32((byte*)&configuration.performance + 4, sizeof(configuration.performance) - 4); |
|
|
|
|
|
|
|
|
|
if (checksum != configuration.performance.checksum) |
|
|
|
|
{ |
|
|
|
|
#ifdef DEBUG |
|
|
|
|
Serial.println(F("Checksum error reading EEPROM performance.")); |
|
|
|
|
#endif |
|
|
|
|
return (false); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
#ifdef DEBUG |
|
|
|
|
Serial.println(F("EEPROM performance loaded.")); |
|
|
|
|
#endif |
|
|
|
|
return (true); |
|
|
|
|
} |
|
|
|
@ -1839,14 +1880,15 @@ void show_configuration(void) |
|
|
|
|
Serial.print(F(" Delay Time ")); Serial.println(configuration.fx.delay_time, DEC); |
|
|
|
|
Serial.print(F(" Delay Feedback ")); Serial.println(configuration.fx.delay_feedback, DEC); |
|
|
|
|
Serial.print(F(" Delay Level ")); Serial.println(configuration.fx.delay_level, DEC); |
|
|
|
|
|
|
|
|
|
for (uint8_t instance_id = 0; instance_id < NUM_DEXED; instance_id++) |
|
|
|
|
{ |
|
|
|
|
Serial.print(F("Dexed instance ")); |
|
|
|
|
Serial.println(instance_id, DEC); |
|
|
|
|
Serial.print(F(" Checksum 0x")); Serial.println(configuration.dexed[instance_id].checksum, HEX); |
|
|
|
|
Serial.print(F(" MIDI-Channel ")); Serial.println(configuration.dexed[instance_id].midi_channel, DEC); |
|
|
|
|
Serial.print(F(" Bank ")); Serial.println(configuration.dexed[instance_id].bank, DEC); |
|
|
|
|
Serial.print(F(" Voice ")); Serial.println(configuration.dexed[instance_id].voice, DEC); |
|
|
|
|
Serial.print(F(" Bank ")); Serial.println(configuration.performance.bank[instance_id], DEC); |
|
|
|
|
Serial.print(F(" Voice ")); Serial.println(configuration.performance.voice[instance_id], DEC); |
|
|
|
|
Serial.print(F(" Lowest Note ")); Serial.println(configuration.dexed[instance_id].lowest_note, DEC); |
|
|
|
|
Serial.print(F(" Highest Note ")); Serial.println(configuration.dexed[instance_id].highest_note, DEC); |
|
|
|
|
Serial.print(F(" Reverb Send ")); Serial.println(configuration.dexed[instance_id].reverb_send, DEC); |
|
|
|
@ -1882,6 +1924,16 @@ void show_configuration(void) |
|
|
|
|
Serial.print(F(" OP Enabled ")); Serial.println(configuration.dexed[instance_id].op_enabled, DEC); |
|
|
|
|
Serial.flush(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Serial.println(F("Performance")); |
|
|
|
|
Serial.print(F(" Checksum 0x")); Serial.println(configuration.performance.checksum, HEX); |
|
|
|
|
for (uint8_t instance_id = 0; instance_id < NUM_DEXED; instance_id++) |
|
|
|
|
{ |
|
|
|
|
Serial.print(F(" Bank ")); Serial.print(instance_id, DEC); Serial.print(" "); Serial.println(configuration.performance.bank[instance_id], DEC); |
|
|
|
|
Serial.print(F(" Voice ")); Serial.print(instance_id, DEC); Serial.print(" "); Serial.println(configuration.performance.voice[instance_id], DEC); |
|
|
|
|
} |
|
|
|
|
Serial.print(F(" FX-Number ")); Serial.println(configuration.performance.fx_number, DEC); |
|
|
|
|
|
|
|
|
|
Serial.println(); |
|
|
|
|
Serial.flush(); |
|
|
|
|
} |
|
|
|
|