Several fixes for getting drums to play again.

dev
Holger Wirtz 1 year ago
parent a34ee7d50d
commit 0627ca3cb2
  1. 154
      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 "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)

367
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) {

@ -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": [
45,
47,

@ -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,
"-",

@ -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 {

@ -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<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 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<JSON_BUFFER_SIZE> 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) {

@ -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);

@ -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;

@ -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,
"-",

Loading…
Cancel
Save