Several fixes for getting drums to play again.

dev
Holger Wirtz 2 years ago
parent a34ee7d50d
commit 0627ca3cb2
  1. 100
      MicroDexed.ino
  2. 367
      UI.hpp
  3. 68
      addon/SD/PERFORMANCE/0/drmmap.json
  4. 3
      addon/SD/PERFORMANCE/0/drums.json
  5. 2
      addon/tools/wav2c.sh
  6. 18
      config.h
  7. 136
      dexed_sd.cpp
  8. 2
      dexed_sd.h
  9. 1
      drums.h
  10. 64
      drumset.h

@ -45,6 +45,7 @@
#include <template_mixer.hpp> #include <template_mixer.hpp>
#include "UI.hpp" #include "UI.hpp"
#if NUM_DRUMS > 0 #if NUM_DRUMS > 0
#include "midinotes.h"
#include "drums.h" #include "drums.h"
#include "drumset.h" #include "drumset.h"
#endif #endif
@ -407,8 +408,6 @@ int16_t* ep_delayline_l;
extern drum_config_t drum_config[NUM_DRUMSET_CONFIG]; extern drum_config_t drum_config[NUM_DRUMSET_CONFIG];
uint8_t drum_counter; uint8_t drum_counter;
uint8_t drum_type[NUM_DRUMS]; uint8_t drum_type[NUM_DRUMS];
int8_t drum_map[NUM_DRUMSET_CONFIG];
uint8_t drum_midi_channel = DRUM_MIDI_CHANNEL;
#endif #endif
#ifdef ENABLE_LCD_UI #ifdef ENABLE_LCD_UI
@ -559,20 +558,14 @@ void setup() {
drum_reverb_send_mixer_r.gain(instance_id, 0.0); drum_reverb_send_mixer_r.gain(instance_id, 0.0);
drum_reverb_send_mixer_l.gain(instance_id, 0.0); drum_reverb_send_mixer_l.gain(instance_id, 0.0);
#endif #endif
// 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;
} }
// Init drumset config
configuration.drums.main_vol = DRUMS_MAIN_VOL_DEFAULT;
configuration.drums.midi_channel = DRUMS_MIDI_CHANNEL_DEFAULT;
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 #endif
}
// Setup EPiano // Setup EPiano
#if defined(USE_FX) #if defined(USE_FX)
@ -711,24 +704,23 @@ void setup() {
master_mixer_l.gain(instance_id, VOL_MAX_FLOAT); master_mixer_l.gain(instance_id, VOL_MAX_FLOAT);
} }
#else #else
master_mixer_r.gain(MASTER_MIX_CH_DEXED1, VOL_MAX_FLOAT); master_mixer_r.gain(MASTER_MIX_CH_DEXED1, VOL_MAX_FLOAT);
master_mixer_l.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_r.gain(MASTER_MIX_CH_DEXED2, 0.0);
master_mixer_l.gain(MASTER_MIX_CH_DEXED2, 0.0); master_mixer_l.gain(MASTER_MIX_CH_DEXED2, 0.0);
#endif #endif
master_mixer_r.gain(MASTER_MIX_CH_REVERB, VOL_MAX_FLOAT); master_mixer_r.gain(MASTER_MIX_CH_REVERB, VOL_MAX_FLOAT);
master_mixer_l.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 #if NUM_DRUMS > 0
master_mixer_r.gain(MASTER_MIX_CH_DRUMS, VOL_MAX_FLOAT); master_mixer_r.gain(MASTER_MIX_CH_DRUMS, VOL_MAX_FLOAT);
master_mixer_l.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 #else
master_mixer_r.gain(MASTER_MIX_CH_DRUMS, 0.0); master_mixer_r.gain(MASTER_MIX_CH_DRUMS, 0.0);
master_mixer_l.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);
#endif #endif
#if defined(TEENSY_AUDIO_BOARD) && defined(SGTL5000_AUDIO_THRU) #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]; char note_name[4];
getNoteName(note_name, inNumber); getNoteName(note_name, inNumber);
Serial.print(F("KeyDown ")); Serial.print(F("KeyDown "));
Serial.print(inNumber);
Serial.print(F("/"));
Serial.print(note_name); Serial.print(note_name);
Serial.print(F(" instance ")); Serial.print(F(" instance "));
Serial.print(instance_id, DEC); Serial.print(instance_id, DEC);
Serial.print(F(" MIDI-channel ")); Serial.print(F(" MIDI-channel "));
Serial.print(inChannel, DEC); Serial.println(inChannel, DEC);
Serial.println(); Serial.flush();
#endif #endif
} }
} }
@ -957,11 +951,13 @@ void handleNoteOn(byte inChannel, byte inNumber, byte inVelocity) {
char note_name[4]; char note_name[4];
getNoteName(note_name, inNumber); getNoteName(note_name, inNumber);
Serial.print(F("KeyDown ")); Serial.print(F("KeyDown "));
Serial.print(inNumber);
Serial.print(F("/"));
Serial.print(note_name); Serial.print(note_name);
Serial.print(F(" EPIANO ")); Serial.print(F(" EPIANO "));
Serial.print(F(" MIDI-channel ")); Serial.print(F(" MIDI-channel "));
Serial.print(inChannel, DEC); Serial.println(inChannel, DEC);
Serial.println(); Serial.flush();
#endif #endif
} }
} }
@ -969,7 +965,7 @@ void handleNoteOn(byte inChannel, byte inNumber, byte inVelocity) {
// Drums // Drums
#if NUM_DRUMS > 0 #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) if (drum_counter >= NUM_DRUMS)
drum_counter = 0; drum_counter = 0;
@ -979,22 +975,15 @@ void handleNoteOn(byte inChannel, byte inNumber, byte inVelocity) {
Serial.print(F("Triggring Drum[")); Serial.print(F("Triggring Drum["));
Serial.print(drum_counter, DEC); Serial.print(drum_counter, DEC);
Serial.print(F("]: with note ")); Serial.print(F("]: with note "));
Serial.print(inNumber);
Serial.print(F("/"));
Serial.println(note_name); Serial.println(note_name);
Serial.flush();
#endif #endif
}
int8_t mapped_note = -1;
for (uint8_t d = 0; d < NUM_DRUMSET_CONFIG; d++) { for (uint8_t d = 0; d < NUM_DRUMSET_CONFIG; d++) {
if (drum_map[inNumber] != -1) { if (inNumber == drum_config[d].midinote) {
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); 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); float pan = mapfloat(drum_config[d].pan, -1.0, 1.0, 0.0, 1.0);
@ -1010,6 +999,9 @@ void handleNoteOn(byte inChannel, byte inNumber, byte inVelocity) {
Drum[slot]->setPlaybackRate(drum_config[d].pitch); Drum[slot]->setPlaybackRate(drum_config[d].pitch);
} }
Drum[slot]->playRaw((int16_t*)drum_config[d].drum_data, drum_config[d].len, 1); Drum[slot]->playRaw((int16_t*)drum_config[d].drum_data, drum_config[d].len, 1);
#ifdef DEBUG
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
} }
#ifdef DEBUG #ifdef DEBUG
@ -1029,7 +1021,6 @@ void handleNoteOn(byte inChannel, byte inNumber, byte inVelocity) {
break; break;
} }
} }
}
#endif #endif
} }
@ -1825,7 +1816,7 @@ void initial_values(bool init) {
//load_sd_performance_json(PERFORMANCE_NUM_MIN); //load_sd_performance_json(PERFORMANCE_NUM_MIN);
} else { } else {
load_sd_sys_json(); load_sd_sys_json();
if (configuration.sys.load_at_startup == 255) { if (configuration.sys.load_at_startup == 0xff) {
#ifdef DEBUG #ifdef DEBUG
Serial.print(F("Loading initial system data from performance ")); Serial.print(F("Loading initial system data from performance "));
Serial.println(configuration.sys.performance_number, DEC); 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++) for (uint8_t instance_id = 0; instance_id < NUM_DEXED; instance_id++)
check_configuration_dexed(instance_id); check_configuration_dexed(instance_id);
check_configuration_epiano(); check_configuration_epiano();
check_configuration_drums();
} }
void check_configuration_sys(void) { 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); configuration.epiano.midi_channel = constrain(configuration.epiano.midi_channel, EP_MIDI_CHANNEL_MIN, EP_MIDI_CHANNEL_MAX);
} }
void check_configuration_drum_config(void) { void check_configuration_drums(void) {
configuration.drums.drum_main_vol = constrain(configuration.drums.drum_main_vol, DRUMS_MAIN_VOL_MIN, DRUMS_MAIN_VOL_MAX); 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++) { 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].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].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); 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) { void init_configuration(void) {
#ifdef DEBUG #ifdef DEBUG
Serial.println(F("INITIALIZING CONFIGURATION")); Serial.println(F("INITIALIZING CONFIGURATION"));
@ -2095,6 +2082,11 @@ void init_configuration(void) {
configuration.epiano.pan = EP_PANORAMA_DEFAULT; configuration.epiano.pan = EP_PANORAMA_DEFAULT;
configuration.epiano.velocity_sense = EP_VELOCITY_SENSE_DEFAULT; configuration.epiano.velocity_sense = EP_VELOCITY_SENSE_DEFAULT;
configuration.epiano.midi_channel = EP_MIDI_CHANNEL_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 #endif
eeprom_update(); eeprom_update();
@ -2357,7 +2349,7 @@ int8_t handle_midi_learn(int8_t note) {
#endif #endif
if (LCDML.FUNC_getID() == LCDML.OTHER_getIDFromFunction(UI_func_drum_midi_note)) { 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); //LCDML.OTHER_jumpToFunc(UI_func_drum_midi_note);
} else if (LCDML.FUNC_getID() == LCDML.OTHER_getIDFromFunction(UI_func_epiano_lowest_note)) { } else if (LCDML.FUNC_getID() == LCDML.OTHER_getIDFromFunction(UI_func_epiano_lowest_note)) {
if (note > configuration.epiano.highest_note) if (note > configuration.epiano.highest_note)

367
UI.hpp

@ -70,6 +70,7 @@ extern char receive_bank_filename[FILENAME_LEN];
extern void eeprom_update(void); extern void eeprom_update(void);
#if NUM_DRUMS > 0 #if NUM_DRUMS > 0
#include "midinotes.h"
#include "drums.h" #include "drums.h"
extern void get_sd_performance_name_json(uint8_t number); extern void get_sd_performance_name_json(uint8_t number);
extern bool save_sd_performance_json(uint8_t p); 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) { 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) { 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) { 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) { 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) { 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) { 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) { 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) { 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) { 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) { 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) { bool _get_midi_note(uint8_t note) {
for (uint8_t i = DRUMS_MIDI_NOTE_MIN; i <= DRUMS_MIDI_NOTE_MAX; i++) { 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 (true);
} }
return (false); return (false);
} }
void _UI_func_drum_midi_note_display(bool mode) { 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) { 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) { void UI_func_save_performance(uint8_t param) {

@ -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
]
}

@ -1,5 +1,6 @@
{ {
"drums_volume": 0.95, "main_volume": 0.95,
"midi_channel": 10,
"note": [ "note": [
45, 45,
47, 47,

@ -186,7 +186,6 @@ do
cat >> "${DRUMS_H}" << EOF cat >> "${DRUMS_H}" << EOF
{ {
${sample[class]}, ${sample[class]},
${NUM_DRUMSET_CONFIG},
${sample[midinote]}, ${sample[midinote]},
"${sample[name]}", "${sample[name]}",
${sample[c_name]}, ${sample[c_name]},
@ -217,7 +216,6 @@ cat >> "${DRUMS_H}" << EOF
{ {
DRUM_NONE, DRUM_NONE,
0, 0,
0,
"EMPTY", "EMPTY",
NULL, NULL,
"-", "-",

@ -118,8 +118,6 @@
#else #else
#define NUM_DRUMS 4 #define NUM_DRUMS 4
#endif #endif
// DEFAULT MIDI CHANNEL FOR DRUMSAMPLER
#define DRUM_MIDI_CHANNEL 10
// NUMBER OF SAMPLES IN DRUMSET // NUMBER OF SAMPLES IN DRUMSET
#if defined(ARDUINO_TEENSY41) #if defined(ARDUINO_TEENSY41)
@ -646,6 +644,10 @@
#define DRUMS_MAIN_VOL_MAX 100 #define DRUMS_MAIN_VOL_MAX 100
#define DRUMS_MAIN_VOL_DEFAULT 80 #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_MIN 21
#define DRUMS_MIDI_NOTE_MAX 108 #define DRUMS_MIDI_NOTE_MAX 108
@ -661,6 +663,9 @@
#define DRUMS_PITCH_MIN -50 #define DRUMS_PITCH_MIN -50
#define DRUMS_PITCH_MAX 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_MIN 15
#define EQ_1_MAX 250 #define EQ_1_MAX 250
#define EQ_1_DEFAULT 50 #define EQ_1_DEFAULT 50
@ -916,13 +921,8 @@ typedef struct performance_s {
} performance_t; } performance_t;
typedef struct drums_s { typedef struct drums_s {
uint8_t drum_main_vol; uint8_t main_vol;
uint8_t drum_midi_channel; uint8_t 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];
} drum_t; } drum_t;
typedef struct configuration_s { typedef struct configuration_s {

@ -35,7 +35,6 @@
#include "drums.h" #include "drums.h"
extern void set_drums_volume(float vol); extern void set_drums_volume(float vol);
extern drum_config_t drum_config[]; extern drum_config_t drum_config[];
extern int8_t drum_map[];
#endif #endif
extern void init_MIDI_send_CC(void); 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_fx(void);
extern void check_configuration_epiano(void); extern void check_configuration_epiano(void);
#if NUM_DRUMS > 0 #if NUM_DRUMS > 0
extern void check_configuration_drum_config(void); extern void check_configuration_drums(void);
extern void check_configuration_drum_map(void);
#endif #endif
extern float midi_volume_transform(uint8_t midi_amp); extern float midi_volume_transform(uint8_t midi_amp);
extern void handleStop(void); extern void handleStop(void);
@ -397,7 +395,7 @@ bool save_sd_bank(const char* bank_filename, uint8_t* data) {
/****************************************************************************** /******************************************************************************
SD DRUMSETTINGS SD DRUMSETTINGS
******************************************************************************/ ******************************************************************************/
#if NUM_DRUMS > 0 #if NUM_DRUMS > 0
bool load_sd_drumsettings_json(uint8_t number) { bool load_sd_drumsettings_json(uint8_t number) {
if (number < 0) if (number < 0)
return (false); return (false);
@ -431,17 +429,18 @@ bool load_sd_drumsettings_json(uint8_t number) {
Serial.println(); Serial.println();
#endif #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++) { 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].pitch = data_json["pitch"][i];
drum_config[i].pan = data_json["pan"][i]; drum_config[i].pan = data_json["pan"][i];
drum_config[i].vol_max = data_json["vol_max"][i]; drum_config[i].vol_max = data_json["vol_max"][i];
drum_config[i].vol_min = data_json["vol_min"][i]; drum_config[i].vol_min = data_json["vol_min"][i];
drum_config[i].reverb_send = data_json["reverb_send"][i]; drum_config[i].reverb_send = data_json["reverb_send"][i];
} }
check_configuration_drum_config(); check_configuration_drums();
return (true); return (true);
} }
#ifdef DEBUG #ifdef DEBUG
@ -488,7 +487,9 @@ bool save_sd_drumsettings_json(uint8_t number) {
} }
json = SD.open(filename, FILE_WRITE); json = SD.open(filename, FILE_WRITE);
if (json) { 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++) { for (uint8_t i = 0; i < NUM_DRUMSET_CONFIG - 1; i++) {
data_json["note"][i] = drum_config[i].midinote; data_json["note"][i] = drum_config[i].midinote;
data_json["pitch"][i] = drum_config[i].pitch; data_json["pitch"][i] = drum_config[i].pitch;
@ -529,122 +530,6 @@ bool save_sd_drumsettings_json(uint8_t number) {
return (false); 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<JSON_BUFFER_SIZE> 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<JSON_BUFFER_SIZE> 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 find_drum_number_from_note(uint8_t note) {
uint8_t number = 0; 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) { bool load_sd_fx_json(uint8_t number) {
number = constrain(number, PERFORMANCE_NUM_MIN, PERFORMANCE_NUM_MAX); number = constrain(number, PERFORMANCE_NUM_MIN, PERFORMANCE_NUM_MAX);
load_sd_drumsettings_json(number);
if (sd_card > 0) { if (sd_card > 0) {
File json; File json;
StaticJsonDocument<JSON_BUFFER_SIZE> data_json; StaticJsonDocument<JSON_BUFFER_SIZE> data_json;
@ -1409,7 +1292,6 @@ bool load_sd_performance_json(uint8_t number) {
load_sd_epiano_json(number); load_sd_epiano_json(number);
#if NUM_DRUMS > 0 #if NUM_DRUMS > 0
load_sd_drumsettings_json(number); load_sd_drumsettings_json(number);
load_sd_drummap_json(number);
#endif #endif
if (sd_card > 0) { if (sd_card > 0) {

@ -66,8 +66,6 @@ bool save_sd_performance_json(uint8_t p);
bool load_sd_drumsettings_json(uint8_t number); bool load_sd_drumsettings_json(uint8_t number);
bool save_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); bool check_performance_directory(uint8_t seq_number);

@ -30,7 +30,6 @@
typedef struct drum_config_s { typedef struct drum_config_s {
uint8_t drum_class; // Type of drum uint8_t drum_class; // Type of drum
uint8_t id; // ID for reference in sequencer
uint8_t midinote; // Triggered by note uint8_t midinote; // Triggered by note
char name[DRUM_NAME_LEN]; char name[DRUM_NAME_LEN];
const uint8_t* drum_data; const uint8_t* drum_data;

@ -237910,7 +237910,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
{ {
{ {
DRUM_BASS, DRUM_BASS,
1,
MIDI_A2, MIDI_A2,
"Clap808", "Clap808",
DRUM_Clap808, DRUM_Clap808,
@ -237924,7 +237923,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_BASS, DRUM_BASS,
2,
MIDI_B2, MIDI_B2,
"S_kick_1", "S_kick_1",
DRUM_Clap808, DRUM_Clap808,
@ -237938,7 +237936,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_BASS, DRUM_BASS,
3,
MIDI_C3, MIDI_C3,
"S_kick2_8", "S_kick2_8",
DRUM_S_kick2_8, DRUM_S_kick2_8,
@ -237952,7 +237949,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_PERCUSSION, DRUM_PERCUSSION,
4,
MIDI_CIS3, MIDI_CIS3,
"S_Stick_1", "S_Stick_1",
DRUM_S_Stick_1, DRUM_S_Stick_1,
@ -237966,7 +237962,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_SNARE, DRUM_SNARE,
5,
MIDI_D3, MIDI_D3,
"S_snare_Ghost_1", "S_snare_Ghost_1",
DRUM_S_snare_Ghost_1, DRUM_S_snare_Ghost_1,
@ -237980,7 +237975,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_SNARE, DRUM_SNARE,
6,
MIDI_DIS3, MIDI_DIS3,
"S_snare2_Ghost_1", "S_snare2_Ghost_1",
DRUM_S_snare2_Ghost_1, DRUM_S_snare2_Ghost_1,
@ -237994,7 +237988,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_SNARE, DRUM_SNARE,
7,
MIDI_E3, MIDI_E3,
"S_snare_2", "S_snare_2",
DRUM_S_snare_2, DRUM_S_snare_2,
@ -238008,7 +238001,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_BASS, DRUM_BASS,
8,
MIDI_F3, MIDI_F3,
"S_loTom_1", "S_loTom_1",
DRUM_S_loTom_1, DRUM_S_loTom_1,
@ -238022,7 +238014,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_BASS, DRUM_BASS,
9,
MIDI_FIS3, MIDI_FIS3,
"S_hhClosed_1", "S_hhClosed_1",
DRUM_S_hhClosed_1, DRUM_S_hhClosed_1,
@ -238036,7 +238027,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_LOWTOM, DRUM_LOWTOM,
10,
MIDI_G3, MIDI_G3,
"S_loTom_1", "S_loTom_1",
DRUM_S_loTom_1, DRUM_S_loTom_1,
@ -238050,7 +238040,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_BASS, DRUM_BASS,
11,
MIDI_GIS3, MIDI_GIS3,
"S_hh_o_1_2", "S_hh_o_1_2",
DRUM_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, DRUM_HIGHTOM,
12,
MIDI_A3, MIDI_A3,
"S_hiTom_5", "S_hiTom_5",
DRUM_S_hiTom_5, DRUM_S_hiTom_5,
@ -238078,7 +238066,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_BASS, DRUM_BASS,
13,
MIDI_AIS3, MIDI_AIS3,
"S_hh_o_5_4", "S_hh_o_5_4",
DRUM_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, DRUM_HIGHTOM,
14,
MIDI_B3, MIDI_B3,
"S_hiTom_5", "S_hiTom_5",
DRUM_S_hiTom_5, DRUM_S_hiTom_5,
@ -238106,7 +238092,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_HIGHTOM, DRUM_HIGHTOM,
15,
MIDI_C4, MIDI_C4,
"S_hiTom_5", "S_hiTom_5",
DRUM_S_hiTom_5, DRUM_S_hiTom_5,
@ -238120,7 +238105,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_BASS, DRUM_BASS,
16,
MIDI_CIS4, MIDI_CIS4,
"S_splash1_1", "S_splash1_1",
DRUM_S_splash1_1, DRUM_S_splash1_1,
@ -238134,7 +238118,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_HIGHTOM, DRUM_HIGHTOM,
17,
MIDI_D4, MIDI_D4,
"S_hiTom_5", "S_hiTom_5",
DRUM_S_hiTom_5, DRUM_S_hiTom_5,
@ -238148,7 +238131,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_CRASH, DRUM_CRASH,
18,
MIDI_DIS4, MIDI_DIS4,
"S_china1_4", "S_china1_4",
DRUM_S_china1_4, DRUM_S_china1_4,
@ -238162,7 +238144,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_CRASH, DRUM_CRASH,
19,
MIDI_E4, MIDI_E4,
"S_china2_1", "S_china2_1",
DRUM_S_china2_1, DRUM_S_china2_1,
@ -238176,7 +238157,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_RIDE, DRUM_RIDE,
20,
MIDI_F4, MIDI_F4,
"S_ride1Bell_1", "S_ride1Bell_1",
DRUM_S_ride1Bell_1, DRUM_S_ride1Bell_1,
@ -238190,7 +238170,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_RIDE, DRUM_RIDE,
21,
MIDI_FIS4, MIDI_FIS4,
"S_ride1Bell_1", "S_ride1Bell_1",
DRUM_S_ride1Bell_1, DRUM_S_ride1Bell_1,
@ -238204,7 +238183,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_CRASH, DRUM_CRASH,
22,
MIDI_G4, MIDI_G4,
"S_crash1_1", "S_crash1_1",
DRUM_S_crash1_1, DRUM_S_crash1_1,
@ -238218,7 +238196,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_BASS, DRUM_BASS,
23,
MIDI_GIS4, MIDI_GIS4,
"S_cowbell_2", "S_cowbell_2",
DRUM_S_cowbell_2, DRUM_S_cowbell_2,
@ -238232,7 +238209,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_RIDE, DRUM_RIDE,
24,
MIDI_A4, MIDI_A4,
"S_ride2Crash_2", "S_ride2Crash_2",
DRUM_S_ride2Crash_2, DRUM_S_ride2Crash_2,
@ -238246,7 +238222,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_RIDE, DRUM_RIDE,
25,
MIDI_AIS4, MIDI_AIS4,
"S_ride2_1", "S_ride2_1",
DRUM_S_ride2_1, DRUM_S_ride2_1,
@ -238260,7 +238235,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_BASS, DRUM_BASS,
26,
MIDI_B4, MIDI_B4,
"808Kick", "808Kick",
DRUM_808Kick, DRUM_808Kick,
@ -238274,7 +238248,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_BASS, DRUM_BASS,
27,
MIDI_C5, MIDI_C5,
"phkick1", "phkick1",
DRUM_phkick1, DRUM_phkick1,
@ -238288,7 +238261,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_SNARE, DRUM_SNARE,
28,
MIDI_CIS5, MIDI_CIS5,
"rims1", "rims1",
DRUM_rims1, DRUM_rims1,
@ -238302,7 +238274,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_SNARE, DRUM_SNARE,
29,
MIDI_D5, MIDI_D5,
"Shaker", "Shaker",
DRUM_Shaker, DRUM_Shaker,
@ -238316,7 +238287,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_HANDCLAP, DRUM_HANDCLAP,
30,
MIDI_DIS5, MIDI_DIS5,
"LNclap1", "LNclap1",
DRUM_LNclap1, DRUM_LNclap1,
@ -238330,7 +238300,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_SNARE, DRUM_SNARE,
31,
MIDI_E5, MIDI_E5,
"LNsnare1", "LNsnare1",
DRUM_LNsnare1, DRUM_LNsnare1,
@ -238344,7 +238313,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_BASS, DRUM_BASS,
32,
MIDI_F5, MIDI_F5,
"Bdtrancy", "Bdtrancy",
DRUM_Bdtrancy, DRUM_Bdtrancy,
@ -238358,7 +238326,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_HIHAT, DRUM_HIHAT,
33,
MIDI_FIS5, MIDI_FIS5,
"hhcl1", "hhcl1",
DRUM_hhcl1, DRUM_hhcl1,
@ -238372,7 +238339,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_BASS, DRUM_BASS,
34,
MIDI_G5, MIDI_G5,
"Belltree", "Belltree",
DRUM_Belltree, DRUM_Belltree,
@ -238386,7 +238352,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_BASS, DRUM_BASS,
35,
MIDI_GIS5, MIDI_GIS5,
"Bongo16", "Bongo16",
DRUM_Bongo16, DRUM_Bongo16,
@ -238400,7 +238365,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_BASS, DRUM_BASS,
36,
MIDI_A5, MIDI_A5,
"Bongo27", "Bongo27",
DRUM_Bongo27, DRUM_Bongo27,
@ -238414,7 +238378,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_BASS, DRUM_BASS,
37,
MIDI_AIS5, MIDI_AIS5,
"Casta", "Casta",
DRUM_Casta, DRUM_Casta,
@ -238428,7 +238391,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_BASS, DRUM_BASS,
38,
MIDI_B5, MIDI_B5,
"Cr78kick", "Cr78kick",
DRUM_Cr78kick, DRUM_Cr78kick,
@ -238442,7 +238404,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_HIHAT, DRUM_HIHAT,
39,
MIDI_C6, MIDI_C6,
"Cr78tmb1", "Cr78tmb1",
DRUM_Cr78tmb1, DRUM_Cr78tmb1,
@ -238456,7 +238417,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_HIHAT, DRUM_HIHAT,
40,
MIDI_CIS6, MIDI_CIS6,
"Cr78tmb2", "Cr78tmb2",
DRUM_Cr78tmb2, DRUM_Cr78tmb2,
@ -238470,7 +238430,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_BASS, DRUM_BASS,
41,
MIDI_D6, MIDI_D6,
"Crash1", "Crash1",
DRUM_Crash1, DRUM_Crash1,
@ -238484,7 +238443,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_BASS, DRUM_BASS,
42,
MIDI_DIS6, MIDI_DIS6,
"Dmpop", "Dmpop",
DRUM_Dmpop, DRUM_Dmpop,
@ -238498,7 +238456,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_BASS, DRUM_BASS,
43,
MIDI_E6, MIDI_E6,
"Electr1", "Electr1",
DRUM_Electr1, DRUM_Electr1,
@ -238512,7 +238469,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_BASS, DRUM_BASS,
44,
MIDI_F6, MIDI_F6,
"Excow", "Excow",
DRUM_Excow, DRUM_Excow,
@ -238526,7 +238482,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_PERCUSSION, DRUM_PERCUSSION,
45,
MIDI_FIS6, MIDI_FIS6,
"Tamb", "Tamb",
DRUM_Tamb, DRUM_Tamb,
@ -238540,7 +238495,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_PERCUSSION, DRUM_PERCUSSION,
46,
MIDI_GIS6, MIDI_GIS6,
"Cowbell", "Cowbell",
DRUM_Cowbell, DRUM_Cowbell,
@ -238554,7 +238508,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_HIHAT, DRUM_HIHAT,
47,
MIDI_G6, MIDI_G6,
"660HatC1", "660HatC1",
DRUM_660HatC1, DRUM_660HatC1,
@ -238568,7 +238521,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_HIHAT, DRUM_HIHAT,
48,
MIDI_A6, MIDI_A6,
"Hhopen1", "Hhopen1",
DRUM_Hhopen1, DRUM_Hhopen1,
@ -238582,7 +238534,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_PERCUSSION, DRUM_PERCUSSION,
49,
MIDI_AIS6, MIDI_AIS6,
"Histicks", "Histicks",
DRUM_Histicks, DRUM_Histicks,
@ -238596,7 +238547,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_PERCUSSION, DRUM_PERCUSSION,
50,
MIDI_B6, MIDI_B6,
"Hr16snr2", "Hr16snr2",
DRUM_Hr16snr2, DRUM_Hr16snr2,
@ -238610,7 +238560,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_HIGHTOM, DRUM_HIGHTOM,
51,
MIDI_C7, MIDI_C7,
"Xrhitom", "Xrhitom",
DRUM_Xrhitom, DRUM_Xrhitom,
@ -238624,7 +238573,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_PERCUSSION, DRUM_PERCUSSION,
52,
MIDI_CIS7, MIDI_CIS7,
"Tick1", "Tick1",
DRUM_Tick1, DRUM_Tick1,
@ -238638,7 +238586,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_PERCUSSION, DRUM_PERCUSSION,
53,
MIDI_D7, MIDI_D7,
"M1-18", "M1-18",
DRUM_M1_18, DRUM_M1_18,
@ -238652,7 +238599,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_PERCUSSION, DRUM_PERCUSSION,
54,
MIDI_DIS7, MIDI_DIS7,
"Md16_clp", "Md16_clp",
DRUM_Md16_clp, DRUM_Md16_clp,
@ -238666,7 +238612,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_HIHAT, DRUM_HIHAT,
55,
MIDI_E7, MIDI_E7,
"Ohhwav", "Ohhwav",
DRUM_Ohhwav, DRUM_Ohhwav,
@ -238680,7 +238625,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_PERCUSSION, DRUM_PERCUSSION,
56,
MIDI_F7, MIDI_F7,
"Quijada", "Quijada",
DRUM_Quijada, DRUM_Quijada,
@ -238694,7 +238638,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_PERCUSSION, DRUM_PERCUSSION,
57,
MIDI_FIS7, MIDI_FIS7,
"tabla1", "tabla1",
DRUM_tabla1, DRUM_tabla1,
@ -238708,7 +238651,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_PERCUSSION, DRUM_PERCUSSION,
58,
MIDI_G7, MIDI_G7,
"Ride808", "Ride808",
DRUM_Ride808, DRUM_Ride808,
@ -238722,7 +238664,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_PERCUSSION, DRUM_PERCUSSION,
59,
MIDI_GIS7, MIDI_GIS7,
"Scratch1", "Scratch1",
DRUM_Scratch1, DRUM_Scratch1,
@ -238736,7 +238677,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_PERCUSSION, DRUM_PERCUSSION,
60,
MIDI_A7, MIDI_A7,
"Tomlow", "Tomlow",
DRUM_Tomlow, DRUM_Tomlow,
@ -238750,7 +238690,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_PERCUSSION, DRUM_PERCUSSION,
61,
MIDI_AIS7, MIDI_AIS7,
"Tom808", "Tom808",
DRUM_Tom808, DRUM_Tom808,
@ -238764,7 +238703,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_BASS, DRUM_BASS,
62,
MIDI_B7, MIDI_B7,
"Vl1lbeep", "Vl1lbeep",
DRUM_Vl1lbeep, DRUM_Vl1lbeep,
@ -238778,7 +238716,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
}, },
{ {
DRUM_BASS, DRUM_BASS,
63,
MIDI_C8, MIDI_C8,
"Vl1hbeep", "Vl1hbeep",
DRUM_Vl1hbeep, DRUM_Vl1hbeep,
@ -238793,7 +238730,6 @@ drum_config_t drum_config[NUM_DRUMSET_CONFIG] =
{ {
DRUM_NONE, DRUM_NONE,
0, 0,
0,
"EMPTY", "EMPTY",
NULL, NULL,
"-", "-",

Loading…
Cancel
Save