Fixing several errors while saving a performance.

Fixing allover volume.
pull/111/head
Holger Wirtz 3 years ago
parent 54920843d2
commit cee32d9462
  1. 20
      MicroDexed.ino
  2. 12
      UI.hpp
  3. 2
      config.h
  4. 145
      dexed_sd.cpp
  5. 2
      dexed_sd.h

@ -418,7 +418,7 @@ void setup()
sgtl5000.enable(); sgtl5000.enable();
sgtl5000.lineOutLevel(SGTL5000_LINEOUT_LEVEL); sgtl5000.lineOutLevel(SGTL5000_LINEOUT_LEVEL);
sgtl5000.dacVolumeRamp(); sgtl5000.dacVolumeRamp();
sgtl5000.dacVolume(1.0); //sgtl5000.dacVolume(1.0); // doing this at the end of setup()
//sgtl5000.dacVolumeRampLinear(); //sgtl5000.dacVolumeRampLinear();
//sgtl5000.dacVolumeRampDisable(); //sgtl5000.dacVolumeRampDisable();
sgtl5000.unmuteHeadphone(); sgtl5000.unmuteHeadphone();
@ -645,6 +645,10 @@ void setup()
strcpy(seq_name, "INIT Perf"); strcpy(seq_name, "INIT Perf");
LCDML.OTHER_jumpToFunc(UI_func_voice_select); LCDML.OTHER_jumpToFunc(UI_func_voice_select);
#if defined(TEENSY_AUDIO_BOARD)
sgtl5000.dacVolume(1.0);
#endif
} }
void loop() void loop()
@ -1873,8 +1877,8 @@ void set_volume(uint8_t v, uint8_t m)
Serial.println(volume_transform(tmp_v / 100.0)); Serial.println(volume_transform(tmp_v / 100.0));
#endif #endif
volume_r.gain(volume_transform(tmp_v / 100.0)); volume_r.gain(volume_transform(tmp_v / 100.0)*VOLUME_MULTIPLIER);
volume_l.gain(volume_transform(tmp_v / 100.0)); volume_l.gain(volume_transform(tmp_v / 100.0)*VOLUME_MULTIPLIER);
switch (m) switch (m)
{ {
@ -2576,6 +2580,16 @@ void check_and_create_directories(void)
} }
} }
sprintf(tmp, "/%s", PERFORMANCE_CONFIG_PATH);
if (!SD.exists(tmp))
{
#ifdef DEBUG
Serial.print(F("Creating directory "));
Serial.println(tmp);
#endif
SD.mkdir(tmp);
}
/* /*
// create directories for configuration files // create directories for configuration files
sprintf(tmp, "/%s", VOICE_CONFIG_PATH); sprintf(tmp, "/%s", VOICE_CONFIG_PATH);

@ -6220,7 +6220,7 @@ void UI_func_load_performance(uint8_t param)
mode = 0; mode = 0;
encoderDir[ENC_R].reset(); encoderDir[ENC_R].reset();
lcd.setCursor(0, 0); lcd.setCursor(0, 0);
lcd.print(F("Load Seq. state ")); lcd.print(F("Load Performance "));
lcd.setCursor(0, 1); lcd.setCursor(0, 1);
sprintf(tmp, "[%2d]", param); sprintf(tmp, "[%2d]", param);
lcd.print(tmp); lcd.print(tmp);
@ -6295,11 +6295,11 @@ void UI_func_save_performance(uint8_t param)
mode = 0; mode = 0;
encoderDir[ENC_R].reset(); encoderDir[ENC_R].reset();
lcd.setCursor(0, 0); lcd.setCursor(0, 0);
lcd.print(F("Save Seq. state:")); lcd.print(F("Save Performance"));
lcd.setCursor(0, 1); lcd.setCursor(0, 1);
sprintf(tmp, "[%2d]", temp_int); sprintf(tmp, "[%2d]", temp_int);
lcd.print(tmp); lcd.print(tmp);
sprintf(tmp, "/%s/%d-S.json", PERFORMANCE_CONFIG_PATH, temp_int); sprintf(tmp, "/%s/%d/%s.json", PERFORMANCE_CONFIG_PATH, temp_int, PERFORMANCE_CONFIG_NAME);
if (SD.exists(tmp)) if (SD.exists(tmp))
overwrite = true; overwrite = true;
else else
@ -6347,7 +6347,7 @@ void UI_func_save_performance(uint8_t param)
if (yesno == true) if (yesno == true)
{ {
char tmp[FILENAME_LEN]; char tmp[FILENAME_LEN];
sprintf(tmp, "/%s/%d-S.json", PERFORMANCE_CONFIG_PATH, temp_int); sprintf(tmp, "/%s/%d/%s.json", PERFORMANCE_CONFIG_PATH, temp_int, PERFORMANCE_CONFIG_NAME);
SD.remove(tmp); SD.remove(tmp);
} }
save_sd_performance_json(temp_int); save_sd_performance_json(temp_int);
@ -6370,7 +6370,7 @@ void UI_func_save_performance(uint8_t param)
if (mode == 0) if (mode == 0)
{ {
char tmp[FILENAME_LEN]; char tmp[FILENAME_LEN];
sprintf(tmp, "/%s/%d-S.json", PERFORMANCE_CONFIG_PATH, temp_int); sprintf(tmp, "/%s/%d/%s.json", PERFORMANCE_CONFIG_PATH, temp_int, PERFORMANCE_CONFIG_NAME);
if (SD.exists(tmp)) if (SD.exists(tmp))
overwrite = true; overwrite = true;
else else
@ -6381,7 +6381,7 @@ void UI_func_save_performance(uint8_t param)
lcd.print(tmp); lcd.print(tmp);
lcd.setCursor(5, 1); lcd.setCursor(5, 1);
if (overwrite == false) { if (overwrite == false) {
lcd.print("-- empty --"); lcd.print("-- EMPTY --");
} else if (check_sd_performance_exists(temp_int)) } else if (check_sd_performance_exists(temp_int))
{ {
get_sd_performance_name_json(temp_int); get_sd_performance_name_json(temp_int);

@ -676,6 +676,8 @@
#define FAVORITES_NUM_MAX 100 #define FAVORITES_NUM_MAX 100
#define FAVORITES_NUM_DEFAULT 0 #define FAVORITES_NUM_DEFAULT 0
#define VOLUME_MULTIPLIER 1.3
// Buffer-size define for load/save configuration as JSON // Buffer-size define for load/save configuration as JSON
#define JSON_BUFFER_SIZE 8192 #define JSON_BUFFER_SIZE 8192

@ -537,55 +537,69 @@ bool save_sd_drumsettings_json(uint8_t number)
File json; File json;
StaticJsonDocument<JSON_BUFFER_SIZE> data_json; StaticJsonDocument<JSON_BUFFER_SIZE> data_json;
sprintf(filename, "/%s/%d/%s.json", PERFORMANCE_CONFIG_PATH, number, DRUMS_CONFIG_NAME); if (check_performance_directory(number))
{
sprintf(filename, "/%s/%d/%s.json", PERFORMANCE_CONFIG_PATH, number, DRUMS_CONFIG_NAME);
#ifdef DEBUG #ifdef DEBUG
Serial.print(F("Saving drums config ")); Serial.print(F("Saving drums config "));
Serial.print(number); Serial.print(number);
Serial.print(F(" to ")); Serial.print(F(" to "));
Serial.println(filename); Serial.println(filename);
#endif #endif
AudioNoInterrupts(); AudioNoInterrupts();
if (SD.exists(filename)) { if (SD.exists(filename)) {
Serial.println("remove old drumsettings file"); Serial.println("remove old drumsettings file");
SD.begin(); SD.begin();
SD.remove(filename); SD.remove(filename);
} }
json = SD.open(filename, FILE_WRITE); json = SD.open(filename, FILE_WRITE);
if (json) if (json)
{
data_json["drums_volume"] = drums_volume;
for (uint8_t i = 0; i < NUM_DRUMSET_CONFIG - 1; i++)
{ {
data_json["note"][i] = get_sample_note(i); data_json["drums_volume"] = drums_volume;
data_json["pitch"][i] = get_sample_pitch(i); for (uint8_t i = 0; i < NUM_DRUMSET_CONFIG - 1; i++)
data_json["p_offset"][i] = get_sample_p_offset(i); {
data_json["pan"][i] = get_sample_pan(i); data_json["note"][i] = get_sample_note(i);
data_json["vol_max"][i] = get_sample_vol_max(i); data_json["pitch"][i] = get_sample_pitch(i);
data_json["vol_min"][i] = get_sample_vol_min(i); data_json["p_offset"][i] = get_sample_p_offset(i);
data_json["reverb_send"][i] = get_sample_reverb_send(i); data_json["pan"][i] = get_sample_pan(i);
data_json["vol_max"][i] = get_sample_vol_max(i);
data_json["vol_min"][i] = get_sample_vol_min(i);
data_json["reverb_send"][i] = get_sample_reverb_send(i);
}
#ifdef DEBUG
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 #ifdef DEBUG
Serial.println(F("Write JSON data:")); Serial.print(F("E : Cannot open "));
serializeJsonPretty(data_json, Serial); Serial.print(filename);
Serial.println(); Serial.println(F(" on SD."));
#endif #endif
serializeJsonPretty(data_json, json); AudioInterrupts();
json.close(); return (false);
}
}
else
{
AudioInterrupts(); AudioInterrupts();
return (true); return (false);
} }
json.close();
AudioInterrupts();
} }
#ifdef DEBUG
else else
{ {
#ifdef DEBUG Serial.println(F("E: SD card not available"));
Serial.print(F("E : Cannot open "));
Serial.print(filename);
Serial.println(F(" on SD."));
#endif
} }
#endif
return (false); return (false);
} }
@ -694,7 +708,7 @@ bool save_sd_voiceconfig_json(uint8_t vc, uint8_t instance_id)
{ {
File json; File json;
StaticJsonDocument<JSON_BUFFER_SIZE> data_json; StaticJsonDocument<JSON_BUFFER_SIZE> data_json;
sprintf(filename, "/%s/%d/%s%d.json", PERFORMANCE_CONFIG_PATH, vc, VOICE_CONFIG_NAME, instance_id); sprintf(filename, "/%s/%d/%s%d.json", PERFORMANCE_CONFIG_PATH, vc, VOICE_CONFIG_NAME, instance_id + 1);
#ifdef DEBUG #ifdef DEBUG
Serial.print(F("Saving voice config ")); Serial.print(F("Saving voice config "));
@ -1134,7 +1148,7 @@ bool save_sd_seq_sub_patterns_json(uint8_t seq_number)
{ {
File json; File json;
StaticJsonDocument<JSON_BUFFER_SIZE> data_json; StaticJsonDocument<JSON_BUFFER_SIZE> data_json;
sprintf(filename, "/%s/%d/%s.json", PERFORMANCE_CONFIG_PATH, seq_number, VELOCITY_CONFIG_NAME); sprintf(filename, "/%s/%d/%s.json", PERFORMANCE_CONFIG_PATH, seq_number, PATTERN_CONFIG_NAME);
#ifdef DEBUG #ifdef DEBUG
Serial.print(F("Saving sequencer patterns ")); Serial.print(F("Saving sequencer patterns "));
Serial.print(seq_number); Serial.print(seq_number);
@ -1192,22 +1206,24 @@ bool save_sd_performance_json(uint8_t seq_number)
handleStop(); handleStop();
} }
dac_mute(); dac_mute();
AudioNoInterrupts(); AudioNoInterrupts();
save_sd_seq_sub_vel_json(seq_number); save_sd_seq_sub_vel_json(seq_number);
save_sd_seq_sub_patterns_json(seq_number); save_sd_seq_sub_patterns_json(seq_number);
#ifdef DEBUG #ifdef DEBUG
Serial.print(F("Write performance config ")); Serial.print(F("Write performance config "));
Serial.print(seq_number); Serial.println(seq_number);
Serial.print(F(" "));
#endif #endif
save_sd_fx_json(seq_number); save_sd_fx_json(seq_number);
for (uint8_t i = 0; i < MAX_DEXED; i++) for (uint8_t i = 0; i < MAX_DEXED; i++)
{ {
sprintf(filename, "/%s/%d/%s%d.json", PERFORMANCE_CONFIG_PATH, seq_number, VOICE_CONFIG_NAME, i); sprintf(filename, "/%s/%d/%s%d.json", PERFORMANCE_CONFIG_PATH, seq_number, VOICE_CONFIG_NAME, i);
#ifdef DEBUG #ifdef DEBUG
Serial.print(F("Write Voice-Config for sequencer")); Serial.print(F("Write Voice-Config for sequencer"));
Serial.print(filename); Serial.println(filename);
Serial.print(F(" "));
#endif #endif
save_sd_voiceconfig_json(seq_number, i); save_sd_voiceconfig_json(seq_number, i);
} }
@ -1226,7 +1242,6 @@ bool save_sd_performance_json(uint8_t seq_number)
int columns = sizeof(seq_patternchain[0]); int columns = sizeof(seq_patternchain[0]);
int rows = total / columns; int rows = total / columns;
Serial.print(F(" ")); Serial.print(F(" "));
SD.begin();
SD.remove(filename); SD.remove(filename);
json = SD.open(filename, FILE_WRITE); json = SD.open(filename, FILE_WRITE);
if (json) if (json)
@ -1290,14 +1305,56 @@ bool save_sd_performance_json(uint8_t seq_number)
} }
json.close(); json.close();
} }
#ifdef DEBUG
else else
{ {
#ifdef DEBUG
Serial.print(F("E : Cannot open ")); Serial.print(F("E : Cannot open "));
Serial.print(filename); Serial.print(filename);
Serial.println(F(" on SD.")); Serial.println(F(" on SD."));
}
#endif #endif
return (false);
}
bool check_performance_directory(uint8_t seq_number)
{
char dir[CONFIG_FILENAME_LEN];
if (sd_card > 0)
{
sprintf(dir, "/%s/%d", PERFORMANCE_CONFIG_PATH, seq_number);
AudioNoInterrupts();
SD.begin();
if (!SD.exists(dir))
{
#ifdef DEBUG
if (SD.mkdir(dir))
{
Serial.print(F("Creating directory "));
Serial.println(dir);
}
else
{
Serial.print(F("E: Cannot create "));
Serial.println(dir);
AudioInterrupts();
return (false);
}
#else
SD.mkdir(dir);
#endif
}
AudioInterrupts();
return (true);
} }
#ifdef DEBUG
else
{
Serial.println(F("E: SD card not available"));
}
#endif
return (false); return (false);
} }

@ -66,6 +66,8 @@ bool save_sd_performance_json(uint8_t p);
bool load_sd_seq_json(uint8_t p); bool load_sd_seq_json(uint8_t p);
bool save_sd_seq_json(uint8_t p); bool save_sd_seq_json(uint8_t p);
bool check_performance_directory(uint8_t seq_number);
bool get_sd_data(File sysex, uint8_t format, uint8_t* conf); bool get_sd_data(File sysex, uint8_t format, uint8_t* conf);
bool write_sd_data(File sysex, uint8_t format, uint8_t* data, uint16_t len); bool write_sd_data(File sysex, uint8_t format, uint8_t* data, uint16_t len);

Loading…
Cancel
Save