diff --git a/OpenUtau.Core/Format/USTx.cs b/OpenUtau.Core/Format/USTx.cs index 65b08d1c6..a27888054 100644 --- a/OpenUtau.Core/Format/USTx.cs +++ b/OpenUtau.Core/Format/USTx.cs @@ -94,19 +94,28 @@ public static UProject Create() { } public static void Save(string filePath, UProject project) { - project.ustxVersion = kUstxVersion; - project.FilePath = filePath; - project.BeforeSave(); - File.WriteAllText(filePath, Yaml.DefaultSerializer.Serialize(project), Encoding.UTF8); - project.Saved = true; - project.AfterSave(); + try { + project.ustxVersion = kUstxVersion; + project.FilePath = filePath; + project.BeforeSave(); + File.WriteAllText(filePath, Yaml.DefaultSerializer.Serialize(project), Encoding.UTF8); + project.Saved = true; + project.AfterSave(); + } catch (Exception ex) { + var e = new MessageCustomizableException("Failed to save ustx: {filePath}", $": {filePath}", ex); + DocManager.Inst.ExecuteCmd(new ErrorMessageNotification(e)); + } } public static void AutoSave(string filePath, UProject project) { - project.ustxVersion = kUstxVersion; - project.BeforeSave(); - File.WriteAllText(filePath, Yaml.DefaultSerializer.Serialize(project), Encoding.UTF8); - project.AfterSave(); + try { + project.ustxVersion = kUstxVersion; + project.BeforeSave(); + File.WriteAllText(filePath, Yaml.DefaultSerializer.Serialize(project), Encoding.UTF8); + project.AfterSave(); + } catch (Exception ex) { + Log.Error(ex, $"Failed to autosave: {filePath}"); + } } public static UProject Load(string filePath) { diff --git a/OpenUtau.Core/Ustx/UTrack.cs b/OpenUtau.Core/Ustx/UTrack.cs index c12a3db7e..841d0d707 100644 --- a/OpenUtau.Core/Ustx/UTrack.cs +++ b/OpenUtau.Core/Ustx/UTrack.cs @@ -223,7 +223,11 @@ public bool ValidateVoiceColor(out string[] oldColors, out string[] newColors) { public void BeforeSave() { singer = Singer?.Id; phonemizer = Phonemizer.GetType().FullName; - VoiceColorNames = VoiceColorExp.options.ToArray(); + if (Singer != null && Singer.Found && VoiceColorExp != null && VoiceColorExp.options.Length > 0) { + VoiceColorNames = VoiceColorExp.options.ToArray(); + } else { + VoiceColorNames = new string[] { "" }; + } } public void AfterLoad(UProject project) {