From 1e8e163a6303d462911b2cc7aa15857b0771d9c7 Mon Sep 17 00:00:00 2001 From: positionhigh Date: Sun, 15 Aug 2021 23:51:20 +0200 Subject: [PATCH] =?UTF-8?q?Dateien=20hochladen=20nach=20=E2=80=9E=E2=80=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dexed_sd.cpp | 238 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 175 insertions(+), 63 deletions(-) diff --git a/dexed_sd.cpp b/dexed_sd.cpp index 1e260de..941ce2f 100644 --- a/dexed_sd.cpp +++ b/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 ******************************************************************************/