Dateien hochladen nach „“

pull/75/head
positionhigh 3 years ago
parent d09e106548
commit 1e8e163a63
  1. 238
      dexed_sd.cpp

@ -759,7 +759,7 @@ bool save_sd_fx_json(uint8_t fx)
return (false);
}
bool load_sd_seq_drumsettings(uint8_t number)
bool load_sd_seq_drumsettings_json(uint8_t number)
{
if (number < 0)
return (false);
@ -771,7 +771,7 @@ bool load_sd_seq_drumsettings(uint8_t number)
File json;
char filename[FILENAME_LEN];
sprintf(filename, "/%s/%s%d-drums.json", SEQ_CONFIG_PATH, SEQ_CONFIG_NAME, number);
sprintf(filename, "/%s/%s%d-d.json", SEQ_CONFIG_PATH, SEQ_CONFIG_NAME, number);
// first check if file exists...
AudioNoInterrupts();
@ -799,10 +799,10 @@ bool load_sd_seq_drumsettings(uint8_t number)
for (uint8_t i = 0; i < 20; i++) // needs to replaced by NUM_DRUMSET_CONFIG but does not work
{
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];
// 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];
}
set_fx_params();
@ -828,8 +828,102 @@ bool load_sd_seq_drumsettings(uint8_t number)
AudioInterrupts();
return (false);
}
bool load_sd_seq_voicesettings_json(uint8_t number)
{
if (number < 0)
return (false);
number = constrain(number, 0, 99);
if (sd_card > 0)
{
File json;
char filename[FILENAME_LEN];
sprintf(filename, "/%s/%s%d-v.json", SEQ_CONFIG_PATH, SEQ_CONFIG_NAME, number);
// first check if file exists...
AudioNoInterrupts();
if (SD.exists(filename))
{
// ... and if: load
#ifdef DEBUG
Serial.print(F("Found Sequencer configuration ["));
Serial.print(filename);
Serial.println(F("]... loading..."));
#endif
json = SD.open(filename);
if (json)
{
deserializeJson(data_json, json);
json.close();
AudioInterrupts();
//check_configuration_fx();
#ifdef DEBUG
Serial.println(F("Read JSON data:"));
serializeJsonPretty(data_json, Serial);
Serial.println();
#endif
for (uint8_t i = 0; i < MAX_DEXED; i++)
{
configuration.performance.bank[i] = data_json["bank"][i];
configuration.performance.voice[i] = data_json["voice"][i];
configuration.fx.reverb_send[i] = data_json["rev_send"][i];
configuration.dexed[i].midi_channel = data_json["midi_ch"][i];
configuration.dexed[i].sound_intensity = data_json["vol"][i];
configuration.dexed[i].transpose = data_json["v_trans"][i];
}
configuration.fx.reverb_roomsize = data_json["rev_roomsize"];
configuration.fx.reverb_damping = data_json["rev_damping"];
configuration.fx.reverb_lowpass = data_json["rev_lowpass"];
configuration.fx.reverb_lodamp = data_json["rev_lodamp"];
configuration.fx.reverb_hidamp = data_json["rev_hidamp"];
configuration.fx.reverb_diffusion = data_json["rev_diffusion"];
configuration.fx.reverb_level = data_json["rev_level"];
configuration.fx.eq_bass = data_json["eq_bass"];
configuration.fx.eq_treble = data_json["eq_treble"];
for (uint8_t i = 0; i < NUM_DEXED; i++)
{
load_sd_voice(configuration.performance.bank[i], configuration.performance.voice[i], i);
MicroDexed[i]->doRefreshVoice();
MicroDexed[i]->panic();
}
seq_tempo_ms = 60000000 / seq_bpm / 4;
timer1.begin(sequencer, seq_tempo_ms / 2, false);
set_fx_params();
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_seq_drumsettings(uint8_t number)
bool save_sd_seq_drumsettings_json(uint8_t number)
{
char filename[FILENAME_LEN];
number = constrain(number, 0, 99);
@ -838,7 +932,7 @@ bool save_sd_seq_drumsettings(uint8_t number)
{
File json;
sprintf(filename, "/%s/%s%d-drums.json", SEQ_CONFIG_PATH, SEQ_CONFIG_NAME, number);
sprintf(filename, "/%s/%s%d-d.json", SEQ_CONFIG_PATH, SEQ_CONFIG_NAME, number);
#ifdef DEBUG
Serial.print(F("Saving drums config "));
@ -851,7 +945,7 @@ bool save_sd_seq_drumsettings(uint8_t number)
json = SD.open(filename, FILE_WRITE);
if (json)
{
// data_json["drums_volume"] = drums_volume;
data_json["drums_volume"] = drums_volume;
for (uint8_t i = 0; i < 20; i++) // needs to be replaced by NUM_DRUMSET_CONFIG
{
@ -883,6 +977,72 @@ bool save_sd_seq_drumsettings(uint8_t number)
AudioInterrupts();
return (false);
}
bool save_sd_seq_voicesettings_json(uint8_t number)
{
char filename[FILENAME_LEN];
number = constrain(number, 0, 99);
if (sd_card > 0)
{
File json;
sprintf(filename, "/%s/%s%d-v.json", SEQ_CONFIG_PATH, SEQ_CONFIG_NAME, number);
#ifdef DEBUG
Serial.print(F("Saving sequencer voice config "));
Serial.print(number);
Serial.print(F(" to "));
Serial.println(filename);
#endif
AudioNoInterrupts();
json = SD.open(filename, FILE_WRITE);
if (json)
{
for (uint8_t i = 0; i < MAX_DEXED; i++)
{
data_json["bank"][i] = configuration.performance.bank[i];
data_json["voice"][i] = configuration.performance.voice[i];
data_json["rev_send"][i] = configuration.fx.reverb_send[i];
data_json["midi_ch"][i] = configuration.dexed[i].midi_channel;
data_json["vol"][i] = configuration.dexed[i].sound_intensity;
data_json["v_trans"][i] = configuration.dexed[i].transpose;
}
data_json["rev_roomsize"] = configuration.fx.reverb_roomsize;
data_json["rev_damping"] = configuration.fx.reverb_damping;
data_json["rev_lowpass"] = configuration.fx.reverb_lowpass;
data_json["rev_lodamp"] = configuration.fx.reverb_lodamp;
data_json["rev_hidamp"] = configuration.fx.reverb_hidamp;
data_json["rev_diffusion"] = configuration.fx.reverb_diffusion;
data_json["rev_level"] = configuration.fx.reverb_level;
data_json["eq_bass"] = configuration.fx.eq_bass;
data_json["eq_treble"] = configuration.fx.eq_treble;
#ifdef DEBUG
Serial.println(F("Write JSON data:"));
serializeJsonPretty(data_json, Serial);
Serial.println();
#endif
serializeJsonPretty(data_json, json);
json.close();
AudioInterrupts();
return (true);
}
json.close();
}
else
{
#ifdef DEBUG
Serial.print(F("E : Cannot open "));
Serial.print(filename);
Serial.println(F(" on SD."));
#endif
}
AudioInterrupts();
return (false);
}
bool save_sd_seq_json(uint8_t seq_number)
{
@ -971,27 +1131,6 @@ bool save_sd_seq_json(uint8_t seq_number)
data_json["seq_inst_dexed"][i] = seq_inst_dexed[i];
}
// following data maybe useful to be included in sequencer store and OPTIONAL to be loaded
for (uint8_t i = 0; i < MAX_DEXED; i++)
{
data_json["bank"][i] = configuration.performance.bank[i];
data_json["voice"][i] = configuration.performance.voice[i];
data_json["rev_send"][i] = configuration.fx.reverb_send[i];
data_json["midi_ch"][i] = configuration.dexed[i].midi_channel;
data_json["vol"][i] = configuration.dexed[i].sound_intensity;
data_json["v_trans"][i] = configuration.dexed[i].transpose;
}
data_json["rev_roomsize"] = configuration.fx.reverb_roomsize;
data_json["rev_damping"] = configuration.fx.reverb_damping;
data_json["rev_lowpass"] = configuration.fx.reverb_lowpass;
data_json["rev_lodamp"] = configuration.fx.reverb_lodamp;
data_json["rev_hidamp"] = configuration.fx.reverb_hidamp;
data_json["rev_diffusion"] = configuration.fx.reverb_diffusion;
data_json["rev_level"] = configuration.fx.reverb_level;
data_json["eq_bass"] = configuration.fx.eq_bass;
data_json["eq_treble"] = configuration.fx.eq_treble;
#ifdef DEBUG
Serial.println(F("Write JSON data:"));
serializeJsonPretty(data_json, Serial);
@ -1012,11 +1151,13 @@ bool save_sd_seq_json(uint8_t seq_number)
Serial.println(F(" on SD."));
#endif
}
//save_sd_seq_drumsettings(seq_number);
save_sd_seq_drumsettings_json(seq_number);
save_sd_seq_voicesettings_json(seq_number);
AudioInterrupts();
return (false);
}
bool load_sd_seq_json(uint8_t seq_number)
{
if (seq_number < 0)
@ -1108,37 +1249,6 @@ bool load_sd_seq_json(uint8_t seq_number)
seq_chord_dexed_inst = data_json["seq_chord_dexed_inst"] ;
seq_transpose = data_json["seq_transpose"];
seq_chain_lenght = data_json["seq_chain_lenght"];
// following data maybe useful to be included in sequencer store and OPTIONAL to be loaded back
for (uint8_t i = 0; i < MAX_DEXED; i++)
{
configuration.performance.bank[i] = data_json["bank"][i];
configuration.performance.voice[i] = data_json["voice"][i];
configuration.fx.reverb_send[i] = data_json["rev_send"][i];
configuration.dexed[i].midi_channel = data_json["midi_ch"][i];
configuration.dexed[i].sound_intensity = data_json["vol"][i];
configuration.dexed[i].transpose = data_json["v_trans"][i];
}
configuration.fx.reverb_roomsize = data_json["rev_roomsize"];
configuration.fx.reverb_damping = data_json["rev_damping"];
configuration.fx.reverb_lowpass = data_json["rev_lowpass"];
configuration.fx.reverb_lodamp = data_json["rev_lodamp"];
configuration.fx.reverb_hidamp = data_json["rev_hidamp"];
configuration.fx.reverb_diffusion = data_json["rev_diffusion"];
configuration.fx.reverb_level = data_json["rev_level"];
configuration.fx.eq_bass = data_json["eq_bass"];
configuration.fx.eq_treble = data_json["eq_treble"];
for (uint8_t i = 0; i < NUM_DEXED; i++)
{
load_sd_voice(configuration.performance.bank[i], configuration.performance.voice[i], i);
MicroDexed[i]->doRefreshVoice();
MicroDexed[i]->panic();
}
seq_tempo_ms = 60000000 / seq_bpm / 4;
timer1.begin(sequencer, seq_tempo_ms / 2, false);
set_fx_params();
@ -1160,11 +1270,13 @@ bool load_sd_seq_json(uint8_t seq_number)
#endif
}
}
//load_sd_seq_drumsettings(seq_number);
load_sd_seq_drumsettings_json(seq_number);
load_sd_seq_voicesettings_json(seq_number);
AudioInterrupts();
return (false);
}
/******************************************************************************
SD PERFORMANCE
******************************************************************************/

Loading…
Cancel
Save