diff --git a/MicroDexed.ino b/MicroDexed.ino index b705706..0e9053f 100644 --- a/MicroDexed.ino +++ b/MicroDexed.ino @@ -45,6 +45,7 @@ #include #include "UI.hpp" #if NUM_DRUMS > 0 +#include "midinotes.h" #include "drums.h" #include "drumset.h" #endif @@ -407,8 +408,6 @@ int16_t* ep_delayline_l; extern drum_config_t drum_config[NUM_DRUMSET_CONFIG]; uint8_t drum_counter; uint8_t drum_type[NUM_DRUMS]; -int8_t drum_map[NUM_DRUMSET_CONFIG]; -uint8_t drum_midi_channel = DRUM_MIDI_CHANNEL; #endif #ifdef ENABLE_LCD_UI @@ -559,20 +558,14 @@ void setup() { drum_reverb_send_mixer_r.gain(instance_id, 0.0); drum_reverb_send_mixer_l.gain(instance_id, 0.0); #endif + } + // Init drumset config + configuration.drums.main_vol = DRUMS_MAIN_VOL_DEFAULT; + configuration.drums.midi_channel = DRUMS_MIDI_CHANNEL_DEFAULT; - // Init drumset config - configuration.drums.drum_midi_channel = DRUM_MIDI_CHANNEL; - for (uint8_t i = 0; i < NUM_DRUMSET_CONFIG - 1; i++) { - configuration.drums.drum_vol[i] = mapfloat((drum_config[i].vol_max - drum_config[i].vol_min) / 2.0, 0.0, 1.0, DRUMS_VOL_MIN, DRUMS_VOL_MAX); - configuration.drums.drum_pan[i] = mapfloat(drum_config[i].pan, -1.0, 1.0, DRUMS_PANORAMA_MIN, DRUMS_PANORAMA_MAX); - configuration.drums.drum_reverb_send[i] = mapfloat(drum_config[i].reverb_send, 0.0, 1.0, DRUMS_REVERB_SEND_MIN, DRUMS_REVERB_SEND_MAX); - configuration.drums.drum_pitch[i] = mapfloat(drum_config[i].pitch, -1.0, 1.0, DRUMS_PITCH_MIN, DRUMS_PITCH_MAX); - configuration.drums.drum_midi_note[i] = constrain(drum_config[i].midinote, DRUMS_MIDI_NOTE_MIN, DRUMS_MIDI_NOTE_MAX); - drum_map[i] = -1; - } - + master_mixer_r.gain(MASTER_MIX_CH_DRUMS, configuration.drums.main_vol); + master_mixer_l.gain(MASTER_MIX_CH_DRUMS, configuration.drums.main_vol); #endif - } // Setup EPiano #if defined(USE_FX) @@ -711,24 +704,23 @@ void setup() { master_mixer_l.gain(instance_id, VOL_MAX_FLOAT); } #else -master_mixer_r.gain(MASTER_MIX_CH_DEXED1, VOL_MAX_FLOAT); -master_mixer_l.gain(MASTER_MIX_CH_DEXED1, VOL_MAX_FLOAT); -master_mixer_r.gain(MASTER_MIX_CH_DEXED2, 0.0); -master_mixer_l.gain(MASTER_MIX_CH_DEXED2, 0.0); + master_mixer_r.gain(MASTER_MIX_CH_DEXED1, VOL_MAX_FLOAT); + master_mixer_l.gain(MASTER_MIX_CH_DEXED1, VOL_MAX_FLOAT); + master_mixer_r.gain(MASTER_MIX_CH_DEXED2, 0.0); + master_mixer_l.gain(MASTER_MIX_CH_DEXED2, 0.0); #endif master_mixer_r.gain(MASTER_MIX_CH_REVERB, VOL_MAX_FLOAT); master_mixer_l.gain(MASTER_MIX_CH_REVERB, VOL_MAX_FLOAT); +#if defined(USE_EPIANO) + master_mixer_r.gain(MASTER_MIX_CH_EPIANO, VOL_MAX_FLOAT); + master_mixer_l.gain(MASTER_MIX_CH_EPIANO, VOL_MAX_FLOAT); +#endif #if NUM_DRUMS > 0 master_mixer_r.gain(MASTER_MIX_CH_DRUMS, VOL_MAX_FLOAT); master_mixer_l.gain(MASTER_MIX_CH_DRUMS, VOL_MAX_FLOAT); - configuration.drums.drum_main_vol = DRUMS_MAIN_VOL_MAX; #else -master_mixer_r.gain(MASTER_MIX_CH_DRUMS, 0.0); -master_mixer_l.gain(MASTER_MIX_CH_DRUMS, 0.0); -#endif -#if defined(USE_EPIANO) - master_mixer_r.gain(MASTER_MIX_CH_EPIANO, VOL_MAX_FLOAT); - master_mixer_l.gain(MASTER_MIX_CH_EPIANO, VOL_MAX_FLOAT); + master_mixer_r.gain(MASTER_MIX_CH_DRUMS, 0.0); + master_mixer_l.gain(MASTER_MIX_CH_DRUMS, 0.0); #endif #if defined(TEENSY_AUDIO_BOARD) && defined(SGTL5000_AUDIO_THRU) @@ -937,12 +929,14 @@ void handleNoteOn(byte inChannel, byte inNumber, byte inVelocity) { char note_name[4]; getNoteName(note_name, inNumber); Serial.print(F("KeyDown ")); + Serial.print(inNumber); + Serial.print(F("/")); Serial.print(note_name); Serial.print(F(" instance ")); Serial.print(instance_id, DEC); Serial.print(F(" MIDI-channel ")); - Serial.print(inChannel, DEC); - Serial.println(); + Serial.println(inChannel, DEC); + Serial.flush(); #endif } } @@ -957,11 +951,13 @@ void handleNoteOn(byte inChannel, byte inNumber, byte inVelocity) { char note_name[4]; getNoteName(note_name, inNumber); Serial.print(F("KeyDown ")); + Serial.print(inNumber); + Serial.print(F("/")); Serial.print(note_name); Serial.print(F(" EPIANO ")); Serial.print(F(" MIDI-channel ")); - Serial.print(inChannel, DEC); - Serial.println(); + Serial.println(inChannel, DEC); + Serial.flush(); #endif } } @@ -969,7 +965,7 @@ void handleNoteOn(byte inChannel, byte inNumber, byte inVelocity) { // Drums #if NUM_DRUMS > 0 - if (inChannel == drum_midi_channel || drum_midi_channel == MIDI_CHANNEL_OMNI) { + if (inChannel == configuration.drums.midi_channel || configuration.drums.midi_channel == MIDI_CHANNEL_OMNI) { if (drum_counter >= NUM_DRUMS) drum_counter = 0; @@ -979,55 +975,50 @@ void handleNoteOn(byte inChannel, byte inNumber, byte inVelocity) { Serial.print(F("Triggring Drum[")); Serial.print(drum_counter, DEC); Serial.print(F("]: with note ")); + Serial.print(inNumber); + Serial.print(F("/")); Serial.println(note_name); + Serial.flush(); #endif + } - int8_t mapped_note = -1; - for (uint8_t d = 0; d < NUM_DRUMSET_CONFIG; d++) { - if (drum_map[inNumber] != -1) { - mapped_note = drum_map[inNumber]; -#ifdef DEBUG - Serial.print("MIDI drum-note mapping ["); - Serial.print(inNumber); - Serial.print("] -> ["); - Serial.print(mapped_note); - Serial.println("]"); -#endif - } - if (mapped_note == drum_config[d].midinote) { - uint8_t slot = drum_get_slot(drum_config[d].drum_class); - float pan = mapfloat(drum_config[d].pan, -1.0, 1.0, 0.0, 1.0); + for (uint8_t d = 0; d < NUM_DRUMSET_CONFIG; d++) { + if (inNumber == drum_config[d].midinote) { + uint8_t slot = drum_get_slot(drum_config[d].drum_class); + float pan = mapfloat(drum_config[d].pan, -1.0, 1.0, 0.0, 1.0); - drum_mixer_r.gain(slot, (1.0 - pan) * volume_transform(mapfloat(inVelocity, 0, 127, drum_config[d].vol_min, drum_config[d].vol_max))); - drum_mixer_l.gain(slot, pan * volume_transform(mapfloat(inVelocity, 0, 127, drum_config[d].vol_min, drum_config[d].vol_max))); + drum_mixer_r.gain(slot, (1.0 - pan) * volume_transform(mapfloat(inVelocity, 0, 127, drum_config[d].vol_min, drum_config[d].vol_max))); + drum_mixer_l.gain(slot, pan * volume_transform(mapfloat(inVelocity, 0, 127, drum_config[d].vol_min, drum_config[d].vol_max))); #ifdef USE_FX - drum_reverb_send_mixer_r.gain(slot, (1.0 - pan) * volume_transform(drum_config[d].reverb_send)); - drum_reverb_send_mixer_l.gain(slot, pan * volume_transform(drum_config[d].reverb_send)); + drum_reverb_send_mixer_r.gain(slot, (1.0 - pan) * volume_transform(drum_config[d].reverb_send)); + drum_reverb_send_mixer_l.gain(slot, pan * volume_transform(drum_config[d].reverb_send)); #endif - if (drum_config[d].drum_data != NULL && drum_config[d].len > 0) { - if (drum_config[d].pitch != 0.0) { - Drum[slot]->enableInterpolation(true); - Drum[slot]->setPlaybackRate(drum_config[d].pitch); - } - Drum[slot]->playRaw((int16_t*)drum_config[d].drum_data, drum_config[d].len, 1); + if (drum_config[d].drum_data != NULL && drum_config[d].len > 0) { + if (drum_config[d].pitch != 0.0) { + Drum[slot]->enableInterpolation(true); + Drum[slot]->setPlaybackRate(drum_config[d].pitch); } - + Drum[slot]->playRaw((int16_t*)drum_config[d].drum_data, drum_config[d].len, 1); #ifdef DEBUG - Serial.print(F("Drum ")); - Serial.print(drum_config[d].shortname); - Serial.print(F(" [")); - Serial.print(drum_config[d].name); - Serial.print(F("], Slot [")); - Serial.print(slot); - Serial.print(F("]: Velocity=")); - Serial.print(mapfloat(inVelocity, 0, 127, drum_config[d].vol_min, drum_config[d].vol_max), 2); - Serial.print(F(" Pan=")); - Serial.print(pan, 2); - Serial.print(F(" ReverbSend=")); - Serial.println(drum_config[d].reverb_send, 2); + Serial.printf("Playing sample [%s][%c%c] on slot [%d] main volume [%d]: drum_data=%p, len=%d\n", drum_config[d].name, drum_config[d].shortname[0], drum_config[d].shortname[1], slot, configuration.drums.main_vol, drum_config[d].drum_data, drum_config[d].len); #endif - break; } + +#ifdef DEBUG + Serial.print(F("Drum ")); + Serial.print(drum_config[d].shortname); + Serial.print(F(" [")); + Serial.print(drum_config[d].name); + Serial.print(F("], Slot [")); + Serial.print(slot); + Serial.print(F("]: Velocity=")); + Serial.print(mapfloat(inVelocity, 0, 127, drum_config[d].vol_min, drum_config[d].vol_max), 2); + Serial.print(F(" Pan=")); + Serial.print(pan, 2); + Serial.print(F(" ReverbSend=")); + Serial.println(drum_config[d].reverb_send, 2); +#endif + break; } } #endif @@ -1825,7 +1816,7 @@ void initial_values(bool init) { //load_sd_performance_json(PERFORMANCE_NUM_MIN); } else { load_sd_sys_json(); - if (configuration.sys.load_at_startup == 255) { + if (configuration.sys.load_at_startup == 0xff) { #ifdef DEBUG Serial.print(F("Loading initial system data from performance ")); Serial.println(configuration.sys.performance_number, DEC); @@ -1865,6 +1856,7 @@ void check_configuration(void) { for (uint8_t instance_id = 0; instance_id < NUM_DEXED; instance_id++) check_configuration_dexed(instance_id); check_configuration_epiano(); + check_configuration_drums(); } void check_configuration_sys(void) { @@ -1976,9 +1968,12 @@ void check_configuration_epiano(void) { configuration.epiano.midi_channel = constrain(configuration.epiano.midi_channel, EP_MIDI_CHANNEL_MIN, EP_MIDI_CHANNEL_MAX); } -void check_configuration_drum_config(void) { - configuration.drums.drum_main_vol = constrain(configuration.drums.drum_main_vol, DRUMS_MAIN_VOL_MIN, DRUMS_MAIN_VOL_MAX); +void check_configuration_drums(void) { + configuration.drums.main_vol = constrain(configuration.drums.main_vol, DRUMS_MAIN_VOL_MIN, DRUMS_MAIN_VOL_MAX); + configuration.drums.midi_channel = constrain(configuration.drums.midi_channel, DRUMS_MIDI_CHANNEL_MIN, DRUMS_MIDI_CHANNEL_MAX); + for (uint8_t i = 0; i < NUM_DRUMSET_CONFIG - 1; i++) { + Serial.printf("CHK m=%d\n", drum_config[i].midinote); drum_config[i].midinote = constrain(drum_config[i].midinote, DRUMS_MIDI_NOTE_MIN, DRUMS_MIDI_NOTE_MAX); drum_config[i].pitch = constrain(drum_config[i].pitch, DRUMS_PITCH_MIN, DRUMS_PITCH_MAX); drum_config[i].pan = constrain(drum_config[i].pan, DRUMS_PANORAMA_MIN, DRUMS_PANORAMA_MAX); @@ -1988,14 +1983,6 @@ void check_configuration_drum_config(void) { } } -void check_configuration_drum_map(void) { - for (uint8_t i = 0; i < NUM_DRUMSET_CONFIG - 1; i++) { - drum_map[i] = constrain(drum_map[i], -1, DRUMS_MIDI_NOTE_MAX); - if (drum_map[i] >= 0 && drum_map[i] < DRUMS_MIDI_NOTE_MIN) - drum_map[i] = -1; - } -} - void init_configuration(void) { #ifdef DEBUG Serial.println(F("INITIALIZING CONFIGURATION")); @@ -2095,6 +2082,11 @@ void init_configuration(void) { configuration.epiano.pan = EP_PANORAMA_DEFAULT; configuration.epiano.velocity_sense = EP_VELOCITY_SENSE_DEFAULT; configuration.epiano.midi_channel = EP_MIDI_CHANNEL_DEFAULT; + +#if NUM_DRUMS > 0 + configuration.drums.main_vol = DRUMS_MAIN_VOL_DEFAULT; + configuration.drums.midi_channel = DRUMS_MIDI_CHANNEL_DEFAULT; +#endif #endif eeprom_update(); @@ -2357,7 +2349,7 @@ int8_t handle_midi_learn(int8_t note) { #endif if (LCDML.FUNC_getID() == LCDML.OTHER_getIDFromFunction(UI_func_drum_midi_note)) { - ret_channel = configuration.drums.drum_midi_channel; + ret_channel = configuration.drums.midi_channel; //LCDML.OTHER_jumpToFunc(UI_func_drum_midi_note); } else if (LCDML.FUNC_getID() == LCDML.OTHER_getIDFromFunction(UI_func_epiano_lowest_note)) { if (note > configuration.epiano.highest_note) diff --git a/UI.hpp b/UI.hpp index 7df8538..c1b9a3b 100644 --- a/UI.hpp +++ b/UI.hpp @@ -70,6 +70,7 @@ extern char receive_bank_filename[FILENAME_LEN]; extern void eeprom_update(void); #if NUM_DRUMS > 0 +#include "midinotes.h" #include "drums.h" extern void get_sd_performance_name_json(uint8_t number); extern bool save_sd_performance_json(uint8_t p); @@ -3980,399 +3981,59 @@ void UI_handle_OP(uint8_t param) { } void UI_func_drum_midi_channel(uint8_t param) { - if (LCDML.FUNC_setup()) // ****** SETUP ********* - { - encoderDir[ENC_R].reset(); - display.setCursor(0, 0); - display.print(F("MIDI Channel")); - } - if (LCDML.FUNC_loop()) // ****** LOOP ********* - { - if (LCDML.BT_checkDown() && encoderDir[ENC_R].Down()) - drum_midi_channel = constrain(drum_midi_channel + ENCODER[ENC_R].speed(), MIDI_CHANNEL_MIN, MIDI_CHANNEL_MAX); - else if (LCDML.BT_checkUp() && encoderDir[ENC_R].Up()) - drum_midi_channel = constrain(drum_midi_channel - ENCODER[ENC_R].speed(), MIDI_CHANNEL_MIN, MIDI_CHANNEL_MAX); - - display.setCursor(0, 1); - if (drum_midi_channel == 0) { - display.print(F("[OMNI]")); - } else { - display_int(drum_midi_channel, 4, false, true, false); - } - } - - if (LCDML.FUNC_close()) // ****** STABLE END ********* - encoderDir[ENC_R].reset(); + ; } void UI_func_drums_main_volume(uint8_t param) { - if (LCDML.FUNC_setup()) // ****** SETUP ********* - { - encoderDir[ENC_R].reset(); - - lcd_special_chars(BLOCKBAR); - display_bar_int("Drum Main Vol", configuration.drums.drum_main_vol, 1.0, DRUMS_MAIN_VOL_MIN, DRUMS_MAIN_VOL_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())) { - if (LCDML.BT_checkDown()) - configuration.drums.drum_main_vol = constrain(configuration.drums.drum_main_vol + ENCODER[ENC_R].speed(), DRUMS_MAIN_VOL_MIN, DRUMS_MAIN_VOL_MAX); - else if (LCDML.BT_checkUp()) - configuration.drums.drum_main_vol = constrain(configuration.drums.drum_main_vol - ENCODER[ENC_R].speed(), DRUMS_MAIN_VOL_MIN, DRUMS_MAIN_VOL_MAX); - } - - display_bar_int("Drum Main Vol", configuration.drums.drum_main_vol, 1.0, DRUMS_MAIN_VOL_MIN, DRUMS_MAIN_VOL_MAX, 3, false, false, false); - - master_mixer_r.gain(MASTER_MIX_CH_DRUMS, mapfloat(configuration.drums.drum_main_vol, DRUMS_MAIN_VOL_MIN, DRUMS_MAIN_VOL_MAX, 0.0, VOL_MAX_FLOAT)); - master_mixer_l.gain(MASTER_MIX_CH_DRUMS, mapfloat(configuration.drums.drum_main_vol, DRUMS_MAIN_VOL_MIN, DRUMS_MAIN_VOL_MAX, 0.0, VOL_MAX_FLOAT)); - } - - if (LCDML.FUNC_close()) // ****** STABLE END ********* - { - lcd_special_chars(SCROLLBAR); - encoderDir[ENC_R].reset(); - } + ; } void _UI_func_drum_pitch_display(bool mode) { - char temp1[10]; - char temp2[10]; - - memset(temp1, 0, sizeof(temp1)); - memset(temp2, 0, sizeof(temp2)); - - if (mode == false) { - snprintf_P(temp1, sizeof(temp1), PSTR("[%02d]"), activesample + 1); - snprintf_P(temp2, sizeof(temp2), PSTR(" %02d "), abs(configuration.drums.drum_pitch[activesample])); - } else { - snprintf_P(temp1, sizeof(temp1), PSTR(" %02d "), activesample + 1); - snprintf_P(temp2, sizeof(temp2), PSTR("[%02d]"), abs(configuration.drums.drum_pitch[activesample])); - } - display.show(1, 0, 4, temp1); - display.show(1, 4, 8, basename(drum_config[activesample].name)); - display.show(1, 12, 4, temp2); + ; } void UI_func_drum_pitch(uint8_t param) { - static bool mode; - - if (LCDML.FUNC_setup()) // ****** SETUP ********* - { - encoderDir[ENC_R].reset(); - display.setCursor(0, 0); - display.print("Drum Pitch"); - _UI_func_drum_pitch_display(mode); - } - - if (LCDML.FUNC_loop()) // ****** LOOP ********* - { - if (LCDML.BT_checkEnter() && encoderDir[ENC_R].ButtonShort()) { - mode = !mode; - } else if (LCDML.BT_checkDown()) { - if (mode == false) - activesample = (activesample + ENCODER[ENC_R].speed()) % (NUM_DRUMSET_CONFIG - 1); - else - configuration.drums.drum_pitch[activesample] = constrain(++configuration.drums.drum_pitch[activesample], DRUMS_PITCH_MIN, DRUMS_PITCH_MAX); - } else if (LCDML.BT_checkUp()) { - if (mode == false) { - uint8_t temp_encoder = ENCODER[ENC_R].speed(); - if (activesample - temp_encoder < 0) - activesample = NUM_DRUMSET_CONFIG - (abs(activesample - temp_encoder)) - 1; - else - activesample -= temp_encoder; - } else - configuration.drums.drum_pitch[activesample] = constrain(--configuration.drums.drum_pitch[activesample], DRUMS_PITCH_MIN, DRUMS_PITCH_MAX); - } - - // Display and set values - _UI_func_drum_pitch_display(mode); - } - - if (LCDML.FUNC_close()) // ****** STABLE END ********* - { - encoderDir[ENC_R].reset(); - } + ; } void _UI_func_drum_volume_display(bool mode) { - char temp1[10]; - char temp2[10]; - - memset(temp1, 0, sizeof(temp1)); - memset(temp2, 0, sizeof(temp2)); - - if (mode == false) { - snprintf_P(temp1, sizeof(temp1), PSTR("[%02d]"), activesample + 1); - snprintf_P(temp2, sizeof(temp2), PSTR(" %02d "), configuration.drums.drum_vol[activesample]); - } else { - snprintf_P(temp1, sizeof(temp1), PSTR(" %02d "), activesample + 1); - snprintf_P(temp2, sizeof(temp2), PSTR("[%02d]"), configuration.drums.drum_vol[activesample]); - } - display.show(1, 0, 4, temp1); - display.show(1, 4, 8, basename(drum_config[activesample].name)); - display.show(1, 12, 4, temp2); + ; } void UI_func_drum_volume(uint8_t param) { - static bool mode; - - if (LCDML.FUNC_setup()) // ****** SETUP ********* - { - encoderDir[ENC_R].reset(); - display.setCursor(0, 0); - display.print("Drum Volume"); - _UI_func_drum_volume_display(mode); - } - - if (LCDML.FUNC_loop()) // ****** LOOP ********* - { - if (LCDML.BT_checkEnter() && encoderDir[ENC_R].ButtonShort()) { - mode = !mode; - } else if (LCDML.BT_checkDown()) { - if (mode == false) - activesample = (activesample + ENCODER[ENC_R].speed()) % (NUM_DRUMSET_CONFIG - 1); - else - configuration.drums.drum_vol[activesample] = constrain(++configuration.drums.drum_vol[activesample], DRUMS_VOL_MIN, DRUMS_VOL_MAX); - } else if (LCDML.BT_checkUp()) { - if (mode == false) { - uint8_t temp_encoder = ENCODER[ENC_R].speed(); - if (activesample - temp_encoder < 0) - activesample = NUM_DRUMSET_CONFIG - (abs(activesample - temp_encoder)) - 1; - else - activesample -= temp_encoder; - } else { - if (configuration.drums.drum_vol[activesample] > DRUMS_VOL_MIN) - configuration.drums.drum_vol[activesample]--; - } - } - - // Display and set values - _UI_func_drum_volume_display(mode); - } - - if (LCDML.FUNC_close()) // ****** STABLE END ********* - { - encoderDir[ENC_R].reset(); - } + ; } void _UI_func_drum_pan_display(bool mode) { - char temp1[10]; - char temp2[10]; - - memset(temp1, 0, sizeof(temp1)); - memset(temp2, 0, sizeof(temp2)); - if (configuration.drums.drum_pan[activesample] > 25) - display.show(0, 14, 4, ">>"); - else if (configuration.drums.drum_pan[activesample] > 10) - display.show(0, 14, 4, " >"); - else if (configuration.drums.drum_pan[activesample] > 0) - display.show(0, 14, 4, "=>"); - else if (configuration.drums.drum_pan[activesample] < -25) - display.show(0, 14, 4, "<<"); - else if (configuration.drums.drum_pan[activesample] < -10) - display.show(0, 14, 4, "< "); - else if (configuration.drums.drum_pan[activesample] < 0) - display.show(0, 14, 4, "<="); - else - display.show(0, 14, 4, "=="); - if (mode == false) { - snprintf_P(temp1, sizeof(temp1), PSTR("[%02d]"), activesample + 1); - snprintf_P(temp2, sizeof(temp2), PSTR(" %02d "), abs(configuration.drums.drum_pan[activesample])); - - } else { - snprintf_P(temp1, sizeof(temp1), PSTR(" %02d "), activesample + 1); - snprintf_P(temp2, sizeof(temp2), PSTR("[%02d]"), abs(configuration.drums.drum_pan[activesample])); - } - display.show(1, 0, 4, temp1); - display.show(1, 4, 8, basename(drum_config[activesample].name)); - display.show(1, 12, 4, temp2); + ; } void UI_func_drum_pan(uint8_t param) { - static bool mode; - - if (LCDML.FUNC_setup()) // ****** SETUP ********* - { - encoderDir[ENC_R].reset(); - display.setCursor(0, 0); - display.print("Drum Panorama"); - _UI_func_drum_pan_display(mode); - } - - if (LCDML.FUNC_loop()) // ****** LOOP ********* - { - if (LCDML.BT_checkEnter() && encoderDir[ENC_R].ButtonShort()) { - mode = !mode; - } else if (LCDML.BT_checkDown()) { - if (mode == false) - activesample = (activesample + ENCODER[ENC_R].speed()) % (NUM_DRUMSET_CONFIG - 1); - else - configuration.drums.drum_pan[activesample] = constrain(++configuration.drums.drum_pan[activesample], DRUMS_PANORAMA_MIN, DRUMS_PANORAMA_MAX); - } else if (LCDML.BT_checkUp()) { - if (mode == false) { - uint8_t temp_encoder = ENCODER[ENC_R].speed(); - if (activesample - temp_encoder < 0) - activesample = NUM_DRUMSET_CONFIG - (abs(activesample - temp_encoder)) - 1; - else - activesample -= temp_encoder; - } else { - configuration.drums.drum_pan[activesample] = constrain(--configuration.drums.drum_pan[activesample], DRUMS_PANORAMA_MIN, DRUMS_PANORAMA_MAX); - } - } - - // Display and set values - _UI_func_drum_pan_display(mode); - } - - if (LCDML.FUNC_close()) // ****** STABLE END ********* - { - encoderDir[ENC_R].reset(); - } + ; } void _UI_func_drum_reverb_send_display(bool mode) { - char temp1[10]; - char temp2[10]; - - memset(temp1, 0, sizeof(temp1)); - memset(temp2, 0, sizeof(temp2)); - - if (mode == false) { - snprintf_P(temp1, sizeof(temp1), PSTR("[%02d]"), activesample + 1); - snprintf_P(temp2, sizeof(temp2), PSTR(" %02d "), configuration.drums.drum_reverb_send[activesample]); - } else { - snprintf_P(temp1, sizeof(temp1), PSTR(" %02d "), activesample + 1); - snprintf_P(temp2, sizeof(temp2), PSTR("[%02d]"), configuration.drums.drum_reverb_send[activesample]); - } - display.show(1, 0, 4, temp1); - display.show(1, 4, 8, basename(drum_config[activesample].name)); - display.show(1, 12, 4, temp2); + ; } void UI_func_drum_reverb_send(uint8_t param) { - static bool mode; - - if (LCDML.FUNC_setup()) // ****** SETUP ********* - { - encoderDir[ENC_R].reset(); - display.setCursor(0, 0); - display.print("Drum RevSend"); - _UI_func_drum_reverb_send_display(mode); - } - - if (LCDML.FUNC_loop()) // ****** LOOP ********* - { - if (LCDML.BT_checkEnter() && encoderDir[ENC_R].ButtonShort()) { - mode = !mode; - } else if (LCDML.BT_checkDown()) { - if (mode == false) - activesample = (activesample + ENCODER[ENC_R].speed()) % (NUM_DRUMSET_CONFIG - 1); - else - configuration.drums.drum_reverb_send[activesample] = constrain(++configuration.drums.drum_reverb_send[activesample], DRUMS_REVERB_SEND_MIN, DRUMS_REVERB_SEND_MAX); - } else if (LCDML.BT_checkUp()) { - if (mode == false) { - uint8_t temp_encoder = ENCODER[ENC_R].speed(); - if (activesample - temp_encoder < 0) - activesample = NUM_DRUMSET_CONFIG - (abs(activesample - temp_encoder)) - 1; - else - activesample -= temp_encoder; - } else { - if (configuration.drums.drum_reverb_send[activesample] > DRUMS_REVERB_SEND_MIN) - configuration.drums.drum_reverb_send[activesample]--; - } - } - - // Display and set values - _UI_func_drum_reverb_send_display(mode); - } - - if (LCDML.FUNC_close()) // ****** STABLE END ********* - { - encoderDir[ENC_R].reset(); - } + ; } bool _get_midi_note(uint8_t note) { for (uint8_t i = DRUMS_MIDI_NOTE_MIN; i <= DRUMS_MIDI_NOTE_MAX; i++) { - if (configuration.drums.drum_midi_note[activesample] == i) + if (drum_config[activesample].midinote == i) return (true); } return (false); } void _UI_func_drum_midi_note_display(bool mode) { - char temp1[10]; - char temp2[10]; - char note_name[4]; - - memset(temp1, 0, sizeof(temp1)); - memset(temp2, 0, sizeof(temp2)); - - getNoteName(note_name, configuration.drums.drum_midi_note[activesample]); - - if (mode == false) { - snprintf_P(temp1, sizeof(temp1), PSTR("[%02d]"), activesample + 1); - if (_get_midi_note(configuration.drums.drum_midi_note[activesample]) == true) - snprintf_P(temp2, sizeof(temp2), PSTR(" %-3s*"), note_name); - else - snprintf_P(temp2, sizeof(temp2), PSTR(" %-3s "), note_name); - } else { - snprintf_P(temp1, sizeof(temp1), PSTR(" %02d "), activesample + 1); - if (_get_midi_note(configuration.drums.drum_midi_note[activesample]) == true) - snprintf_P(temp2, sizeof(temp2), PSTR("<%-3s>"), note_name); - else - snprintf_P(temp2, sizeof(temp2), PSTR(" %-3s*"), note_name); - } - display.show(1, 0, 4, temp1); - display.show(1, 4, 7, basename(drum_config[activesample].name)); - display.show(1, 11, 5, temp2); + ; } void UI_func_drum_midi_note(uint8_t param) { - static bool mode; - - if (LCDML.FUNC_setup()) // ****** SETUP ********* - { - encoderDir[ENC_R].reset(); - display.setCursor(0, 0); - display.print("Drum MIDI Note"); - _UI_func_drum_midi_note_display(mode); - midi_learn_mode = true; //configuration.drums.drum_midi_note[activesample]; - } - - if (LCDML.FUNC_loop()) // ****** LOOP ********* - { - if (LCDML.BT_checkEnter() && encoderDir[ENC_R].ButtonShort()) { - mode = !mode; - } else if (LCDML.BT_checkDown()) { - if (mode == false) - activesample = (activesample + ENCODER[ENC_R].speed()) % (NUM_DRUMSET_CONFIG - 1); - else - configuration.drums.drum_midi_note[activesample] = constrain(++configuration.drums.drum_midi_note[activesample], DRUMS_MIDI_NOTE_MIN, DRUMS_MIDI_NOTE_MAX); - } else if (LCDML.BT_checkUp()) { - if (mode == false) { - uint8_t temp_encoder = ENCODER[ENC_R].speed(); - if (activesample - temp_encoder < 0) - activesample = NUM_DRUMSET_CONFIG - (abs(activesample - temp_encoder)) - 1; - else - activesample -= temp_encoder; - } else { - configuration.drums.drum_midi_note[activesample] = constrain(--configuration.drums.drum_midi_note[activesample], DRUMS_MIDI_NOTE_MIN, DRUMS_MIDI_NOTE_MAX); - } - } - - // Display and set values - _UI_func_drum_midi_note_display(mode); - } - - if (LCDML.FUNC_close()) // ****** STABLE END ********* - { - encoderDir[ENC_R].reset(); - midi_learn_mode = false; - } + ; } void UI_func_save_performance(uint8_t param) { diff --git a/addon/SD/PERFORMANCE/0/drmmap.json b/addon/SD/PERFORMANCE/0/drmmap.json deleted file mode 100755 index 4ff1f3a..0000000 --- a/addon/SD/PERFORMANCE/0/drmmap.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "map": [ - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] -} diff --git a/addon/SD/PERFORMANCE/0/drums.json b/addon/SD/PERFORMANCE/0/drums.json index 4d86f6e..5aa8242 100755 --- a/addon/SD/PERFORMANCE/0/drums.json +++ b/addon/SD/PERFORMANCE/0/drums.json @@ -1,5 +1,6 @@ { - "drums_volume": 0.95, + "main_volume": 0.95, + "midi_channel": 10, "note": [ 45, 47, diff --git a/addon/tools/wav2c.sh b/addon/tools/wav2c.sh index 591d0d7..2a4e0e0 100755 --- a/addon/tools/wav2c.sh +++ b/addon/tools/wav2c.sh @@ -186,7 +186,6 @@ do cat >> "${DRUMS_H}" << EOF { ${sample[class]}, - ${NUM_DRUMSET_CONFIG}, ${sample[midinote]}, "${sample[name]}", ${sample[c_name]}, @@ -217,7 +216,6 @@ cat >> "${DRUMS_H}" << EOF { DRUM_NONE, 0, - 0, "EMPTY", NULL, "-", diff --git a/config.h b/config.h index c5035c2..e3f6592 100644 --- a/config.h +++ b/config.h @@ -118,8 +118,6 @@ #else #define NUM_DRUMS 4 #endif -// DEFAULT MIDI CHANNEL FOR DRUMSAMPLER -#define DRUM_MIDI_CHANNEL 10 // NUMBER OF SAMPLES IN DRUMSET #if defined(ARDUINO_TEENSY41) @@ -646,6 +644,10 @@ #define DRUMS_MAIN_VOL_MAX 100 #define DRUMS_MAIN_VOL_DEFAULT 80 +#define DRUMS_MIDI_CHANNEL_MIN MIDI_CHANNEL_OMNI +#define DRUMS_MIDI_CHANNEL_MAX 16 +#define DRUMS_MIDI_CHANNEL_DEFAULT 10 + #define DRUMS_MIDI_NOTE_MIN 21 #define DRUMS_MIDI_NOTE_MAX 108 @@ -661,6 +663,9 @@ #define DRUMS_PITCH_MIN -50 #define DRUMS_PITCH_MAX 50 +#define DRUMS_PITCH_FLOAT_MIN -5.0 +#define DRUMS_PITCH_FLOAT_MAX -5.0 + #define EQ_1_MIN 15 #define EQ_1_MAX 250 #define EQ_1_DEFAULT 50 @@ -916,13 +921,8 @@ typedef struct performance_s { } performance_t; typedef struct drums_s { - uint8_t drum_main_vol; - uint8_t drum_midi_channel; - uint8_t drum_midi_note[NUM_DRUMSET_CONFIG - 1]; - uint8_t drum_vol[NUM_DRUMSET_CONFIG - 1]; - int8_t drum_pan[NUM_DRUMSET_CONFIG - 1]; - uint8_t drum_reverb_send[NUM_DRUMSET_CONFIG - 1]; - int8_t drum_pitch[NUM_DRUMSET_CONFIG - 1]; + uint8_t main_vol; + uint8_t midi_channel; } drum_t; typedef struct configuration_s { diff --git a/dexed_sd.cpp b/dexed_sd.cpp index 11bda9f..52f7dd6 100644 --- a/dexed_sd.cpp +++ b/dexed_sd.cpp @@ -35,7 +35,6 @@ #include "drums.h" extern void set_drums_volume(float vol); extern drum_config_t drum_config[]; -extern int8_t drum_map[]; #endif extern void init_MIDI_send_CC(void); @@ -44,8 +43,7 @@ extern void check_configuration_performance(void); extern void check_configuration_fx(void); extern void check_configuration_epiano(void); #if NUM_DRUMS > 0 -extern void check_configuration_drum_config(void); -extern void check_configuration_drum_map(void); +extern void check_configuration_drums(void); #endif extern float midi_volume_transform(uint8_t midi_amp); extern void handleStop(void); @@ -397,7 +395,7 @@ bool save_sd_bank(const char* bank_filename, uint8_t* data) { /****************************************************************************** SD DRUMSETTINGS ******************************************************************************/ - #if NUM_DRUMS > 0 +#if NUM_DRUMS > 0 bool load_sd_drumsettings_json(uint8_t number) { if (number < 0) return (false); @@ -431,17 +429,18 @@ bool load_sd_drumsettings_json(uint8_t number) { Serial.println(); #endif - configuration.drums.drum_main_vol = data_json["drums_volume"]; + configuration.drums.main_vol = mapfloat(data_json["main_volume"], 0.0, 1.0, DRUMS_MAIN_VOL_MIN, DRUMS_MAIN_VOL_MAX); + configuration.drums.midi_channel = data_json["midi_channel"]; for (uint8_t i = 0; i < NUM_DRUMSET_CONFIG - 1; i++) { - drum_config[i].midinote = data_json["pitch"][i]; + drum_config[i].midinote = data_json["note"][i]; drum_config[i].pitch = data_json["pitch"][i]; drum_config[i].pan = data_json["pan"][i]; drum_config[i].vol_max = data_json["vol_max"][i]; drum_config[i].vol_min = data_json["vol_min"][i]; drum_config[i].reverb_send = data_json["reverb_send"][i]; } - check_configuration_drum_config(); + check_configuration_drums(); return (true); } #ifdef DEBUG @@ -488,7 +487,9 @@ bool save_sd_drumsettings_json(uint8_t number) { } json = SD.open(filename, FILE_WRITE); if (json) { - data_json["drums_volume"] = configuration.drums.drum_main_vol; + data_json["main_volume"] = configuration.drums.main_vol; + data_json["midi_channel"] = configuration.drums.midi_channel; + for (uint8_t i = 0; i < NUM_DRUMSET_CONFIG - 1; i++) { data_json["note"][i] = drum_config[i].midinote; data_json["pitch"][i] = drum_config[i].pitch; @@ -529,122 +530,6 @@ bool save_sd_drumsettings_json(uint8_t number) { return (false); } -bool load_sd_drummap_json(uint8_t number) { - if (number < 0) - return (false); - - number = constrain(number, PERFORMANCE_NUM_MIN, PERFORMANCE_NUM_MAX); - - if (sd_card > 0) { - File json; - StaticJsonDocument data_json; - char filename[CONFIG_FILENAME_LEN]; - - snprintf_P(filename, sizeof(filename), PSTR("/%s/%d/%s.json"), PERFORMANCE_CONFIG_PATH, number, DRUMS_MAPPING_NAME); - - // first check if file exists... - AudioNoInterrupts(); - if (SD.exists(filename)) { - // ... and if: load -#ifdef DEBUG - Serial.print(F("Found drum mapping [")); - Serial.print(filename); - Serial.println(F("]... loading...")); -#endif - json = SD.open(filename); - if (json) { - deserializeJson(data_json, json); - json.close(); - AudioInterrupts(); -#if defined(DEBUG) && defined(DEBUG_SHOW_JSON) - Serial.println(F("Read JSON data:")); - serializeJsonPretty(data_json, Serial); - Serial.println(); -#endif - - for (uint8_t i = 0; i < NUM_DRUMSET_CONFIG - 1; i++) - drum_map[i] = data_json["map"][i]; - check_configuration_drum_map(); - return (true); - } -#ifdef DEBUG - else { - Serial.print(F("E : Cannot open ")); - Serial.print(filename); - Serial.println(F(" on SD.")); - } - } else { - Serial.print(F("No ")); - Serial.print(filename); - Serial.println(F(" available.")); -#endif - } - } - AudioInterrupts(); - return (false); -} - -bool save_sd_drummap_json(uint8_t number) { - char filename[CONFIG_FILENAME_LEN]; - number = constrain(number, PERFORMANCE_NUM_MIN, PERFORMANCE_NUM_MAX); - - if (sd_card > 0) { - File json; - StaticJsonDocument data_json; - - if (check_performance_directory(number)) { - snprintf_P(filename, sizeof(filename), PSTR("/%s/%d/%s.json"), PERFORMANCE_CONFIG_PATH, number, DRUMS_MAPPING_NAME); - -#ifdef DEBUG - Serial.print(F("Saving drums-map ")); - Serial.print(number); - Serial.print(F(" to ")); - Serial.println(filename); -#endif - AudioNoInterrupts(); - if (SD.exists(filename)) { -#ifdef DEBUG - Serial.println(F("remove old drum-map file")); -#endif - SD.begin(); - SD.remove(filename); - } - json = SD.open(filename, FILE_WRITE); - if (json) { - for (uint8_t i = 0; i < NUM_DRUMSET_CONFIG - 1; i++) - data_json["map"][i] = drum_map[i]; - -#if defined(DEBUG) && defined(DEBUG_SHOW_JSON) - Serial.println(F("Write JSON data:")); - serializeJsonPretty(data_json, Serial); - Serial.println(); -#endif - serializeJsonPretty(data_json, json); - json.close(); - AudioInterrupts(); - return (true); - } else { -#ifdef DEBUG - Serial.print(F("E : Cannot open ")); - Serial.print(filename); - Serial.println(F(" on SD.")); -#endif - AudioInterrupts(); - return (false); - } - } else { - AudioInterrupts(); - return (false); - } - } -#ifdef DEBUG - else { - Serial.println(F("E: SD card not available")); - } -#endif - return (false); -} - /* uint8_t find_drum_number_from_note(uint8_t note) { uint8_t number = 0; @@ -837,8 +722,6 @@ bool save_sd_voiceconfig_json(uint8_t vc, uint8_t instance_id) { bool load_sd_fx_json(uint8_t number) { number = constrain(number, PERFORMANCE_NUM_MIN, PERFORMANCE_NUM_MAX); - load_sd_drumsettings_json(number); - if (sd_card > 0) { File json; StaticJsonDocument data_json; @@ -1409,7 +1292,6 @@ bool load_sd_performance_json(uint8_t number) { load_sd_epiano_json(number); #if NUM_DRUMS > 0 load_sd_drumsettings_json(number); - load_sd_drummap_json(number); #endif if (sd_card > 0) { diff --git a/dexed_sd.h b/dexed_sd.h index 9caba34..161d241 100644 --- a/dexed_sd.h +++ b/dexed_sd.h @@ -66,8 +66,6 @@ bool save_sd_performance_json(uint8_t p); bool load_sd_drumsettings_json(uint8_t number); bool save_sd_drumsettings_json(uint8_t number); -bool load_sd_drummap_json(uint8_t p); -bool save_sd_drummap_json(uint8_t p); bool check_performance_directory(uint8_t seq_number); diff --git a/drums.h b/drums.h index 412b56a..e8824a2 100644 --- a/drums.h +++ b/drums.h @@ -30,7 +30,6 @@ typedef struct drum_config_s { uint8_t drum_class; // Type of drum - uint8_t id; // ID for reference in sequencer uint8_t midinote; // Triggered by note char name[DRUM_NAME_LEN]; const uint8_t* drum_data; diff --git a/drumset.h b/drumset.h index d305d4e..26ebf94 100644 --- a/drumset.h +++ b/drumset.h @@ -237910,7 +237910,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = { { DRUM_BASS, - 1, MIDI_A2, "Clap808", DRUM_Clap808, @@ -237924,7 +237923,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_BASS, - 2, MIDI_B2, "S_kick_1", DRUM_Clap808, @@ -237938,7 +237936,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_BASS, - 3, MIDI_C3, "S_kick2_8", DRUM_S_kick2_8, @@ -237952,7 +237949,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_PERCUSSION, - 4, MIDI_CIS3, "S_Stick_1", DRUM_S_Stick_1, @@ -237966,7 +237962,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_SNARE, - 5, MIDI_D3, "S_snare_Ghost_1", DRUM_S_snare_Ghost_1, @@ -237980,7 +237975,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_SNARE, - 6, MIDI_DIS3, "S_snare2_Ghost_1", DRUM_S_snare2_Ghost_1, @@ -237994,7 +237988,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_SNARE, - 7, MIDI_E3, "S_snare_2", DRUM_S_snare_2, @@ -238008,7 +238001,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_BASS, - 8, MIDI_F3, "S_loTom_1", DRUM_S_loTom_1, @@ -238022,7 +238014,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_BASS, - 9, MIDI_FIS3, "S_hhClosed_1", DRUM_S_hhClosed_1, @@ -238036,7 +238027,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_LOWTOM, - 10, MIDI_G3, "S_loTom_1", DRUM_S_loTom_1, @@ -238050,7 +238040,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_BASS, - 11, MIDI_GIS3, "S_hh_o_1_2", DRUM_S_hh_o_1_2, @@ -238064,7 +238053,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_HIGHTOM, - 12, MIDI_A3, "S_hiTom_5", DRUM_S_hiTom_5, @@ -238078,7 +238066,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_BASS, - 13, MIDI_AIS3, "S_hh_o_5_4", DRUM_S_hh_o_5_4, @@ -238092,7 +238079,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_HIGHTOM, - 14, MIDI_B3, "S_hiTom_5", DRUM_S_hiTom_5, @@ -238106,7 +238092,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_HIGHTOM, - 15, MIDI_C4, "S_hiTom_5", DRUM_S_hiTom_5, @@ -238120,7 +238105,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_BASS, - 16, MIDI_CIS4, "S_splash1_1", DRUM_S_splash1_1, @@ -238134,7 +238118,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_HIGHTOM, - 17, MIDI_D4, "S_hiTom_5", DRUM_S_hiTom_5, @@ -238148,7 +238131,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_CRASH, - 18, MIDI_DIS4, "S_china1_4", DRUM_S_china1_4, @@ -238162,7 +238144,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_CRASH, - 19, MIDI_E4, "S_china2_1", DRUM_S_china2_1, @@ -238176,7 +238157,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_RIDE, - 20, MIDI_F4, "S_ride1Bell_1", DRUM_S_ride1Bell_1, @@ -238190,7 +238170,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_RIDE, - 21, MIDI_FIS4, "S_ride1Bell_1", DRUM_S_ride1Bell_1, @@ -238204,7 +238183,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_CRASH, - 22, MIDI_G4, "S_crash1_1", DRUM_S_crash1_1, @@ -238218,7 +238196,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_BASS, - 23, MIDI_GIS4, "S_cowbell_2", DRUM_S_cowbell_2, @@ -238232,7 +238209,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_RIDE, - 24, MIDI_A4, "S_ride2Crash_2", DRUM_S_ride2Crash_2, @@ -238246,7 +238222,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_RIDE, - 25, MIDI_AIS4, "S_ride2_1", DRUM_S_ride2_1, @@ -238260,7 +238235,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_BASS, - 26, MIDI_B4, "808Kick", DRUM_808Kick, @@ -238274,7 +238248,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_BASS, - 27, MIDI_C5, "phkick1", DRUM_phkick1, @@ -238288,7 +238261,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_SNARE, - 28, MIDI_CIS5, "rims1", DRUM_rims1, @@ -238302,7 +238274,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_SNARE, - 29, MIDI_D5, "Shaker", DRUM_Shaker, @@ -238316,7 +238287,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_HANDCLAP, - 30, MIDI_DIS5, "LNclap1", DRUM_LNclap1, @@ -238330,7 +238300,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_SNARE, - 31, MIDI_E5, "LNsnare1", DRUM_LNsnare1, @@ -238344,7 +238313,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_BASS, - 32, MIDI_F5, "Bdtrancy", DRUM_Bdtrancy, @@ -238358,7 +238326,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_HIHAT, - 33, MIDI_FIS5, "hhcl1", DRUM_hhcl1, @@ -238372,7 +238339,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_BASS, - 34, MIDI_G5, "Belltree", DRUM_Belltree, @@ -238386,7 +238352,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_BASS, - 35, MIDI_GIS5, "Bongo16", DRUM_Bongo16, @@ -238400,7 +238365,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_BASS, - 36, MIDI_A5, "Bongo27", DRUM_Bongo27, @@ -238414,7 +238378,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_BASS, - 37, MIDI_AIS5, "Casta", DRUM_Casta, @@ -238428,7 +238391,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_BASS, - 38, MIDI_B5, "Cr78kick", DRUM_Cr78kick, @@ -238442,7 +238404,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_HIHAT, - 39, MIDI_C6, "Cr78tmb1", DRUM_Cr78tmb1, @@ -238456,7 +238417,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_HIHAT, - 40, MIDI_CIS6, "Cr78tmb2", DRUM_Cr78tmb2, @@ -238470,7 +238430,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_BASS, - 41, MIDI_D6, "Crash1", DRUM_Crash1, @@ -238484,7 +238443,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_BASS, - 42, MIDI_DIS6, "Dmpop", DRUM_Dmpop, @@ -238498,7 +238456,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_BASS, - 43, MIDI_E6, "Electr1", DRUM_Electr1, @@ -238512,7 +238469,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_BASS, - 44, MIDI_F6, "Excow", DRUM_Excow, @@ -238526,7 +238482,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_PERCUSSION, - 45, MIDI_FIS6, "Tamb", DRUM_Tamb, @@ -238540,7 +238495,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_PERCUSSION, - 46, MIDI_GIS6, "Cowbell", DRUM_Cowbell, @@ -238554,7 +238508,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_HIHAT, - 47, MIDI_G6, "660HatC1", DRUM_660HatC1, @@ -238568,7 +238521,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_HIHAT, - 48, MIDI_A6, "Hhopen1", DRUM_Hhopen1, @@ -238582,7 +238534,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_PERCUSSION, - 49, MIDI_AIS6, "Histicks", DRUM_Histicks, @@ -238596,7 +238547,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_PERCUSSION, - 50, MIDI_B6, "Hr16snr2", DRUM_Hr16snr2, @@ -238610,7 +238560,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_HIGHTOM, - 51, MIDI_C7, "Xrhitom", DRUM_Xrhitom, @@ -238624,7 +238573,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_PERCUSSION, - 52, MIDI_CIS7, "Tick1", DRUM_Tick1, @@ -238638,7 +238586,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_PERCUSSION, - 53, MIDI_D7, "M1-18", DRUM_M1_18, @@ -238652,7 +238599,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_PERCUSSION, - 54, MIDI_DIS7, "Md16_clp", DRUM_Md16_clp, @@ -238666,7 +238612,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_HIHAT, - 55, MIDI_E7, "Ohhwav", DRUM_Ohhwav, @@ -238680,7 +238625,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_PERCUSSION, - 56, MIDI_F7, "Quijada", DRUM_Quijada, @@ -238694,7 +238638,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_PERCUSSION, - 57, MIDI_FIS7, "tabla1", DRUM_tabla1, @@ -238708,7 +238651,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_PERCUSSION, - 58, MIDI_G7, "Ride808", DRUM_Ride808, @@ -238722,7 +238664,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_PERCUSSION, - 59, MIDI_GIS7, "Scratch1", DRUM_Scratch1, @@ -238736,7 +238677,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_PERCUSSION, - 60, MIDI_A7, "Tomlow", DRUM_Tomlow, @@ -238750,7 +238690,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_PERCUSSION, - 61, MIDI_AIS7, "Tom808", DRUM_Tom808, @@ -238764,7 +238703,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_BASS, - 62, MIDI_B7, "Vl1lbeep", DRUM_Vl1lbeep, @@ -238778,7 +238716,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = }, { DRUM_BASS, - 63, MIDI_C8, "Vl1hbeep", DRUM_Vl1hbeep, @@ -238793,7 +238730,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] = { DRUM_NONE, 0, - 0, "EMPTY", NULL, "-",