public void Save() { var xmlFileName = new FileInfo(_fileName); if (!xmlFileName.Exists || xmlFileName.Extension != MuseScoreApp.XMLFileExt) { return; } var outputDirectory = Settings.Default.OutputPath.Trim('\\') + "\\"; if (!Directory.Exists(outputDirectory)) { Directory.CreateDirectory(outputDirectory); } var dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); var tempDir = Directory.CreateDirectory(dir + "\\temp\\" + Guid.NewGuid()); try { var mxmlFileName = tempDir.FullName + "\\" + xmlFileName.Name; File.Copy(xmlFileName.FullName, mxmlFileName); var mxmlDoc = new XmlDocument(); mxmlDoc.Load(mxmlFileName); foreach (XmlElement creditNode in mxmlDoc.SelectNodes("//credit").Cast<XmlElement>().ToList()) { // remove all existing credit nodes creditNode.ParentNode.RemoveChild(creditNode); } AppendCreditNode(mxmlDoc.DocumentElement, "595.238", "1626.98", "24", "center", "top", Title.Trim()); AppendCreditNode(mxmlDoc.DocumentElement, "595.238", "1570.29", "14", "center", "top", GetSubTitleAndPattern()); AppendCreditNode(mxmlDoc.DocumentElement, "1133.79", "1559.98", "12", "right", "top", GetComposerAndTexter()); AppendCreditNode(mxmlDoc.DocumentElement, "1133.79", "1583.98", "10", "right", "top", GetArrangedBy()); mxmlDoc.Save(mxmlFileName); var museScore = new MuseScoreApp(); var museScoreFile = museScore.ConvertXMLtoMuseScore(mxmlFileName); if (museScoreFile != null && File.Exists(museScoreFile)) { ProcessMuseScoreFile(museScoreFile, ArrangedByTransformer, RemoveCaptionsTransformer, PageSettingsTransformer, AutoBreakTransformer); var compressedMuseScoreFile = museScore.ConvertMuseScoretoCompressedMuseScore(museScoreFile); var targetMuseScoreFile = GetFileName(outputDirectory); File.Copy(compressedMuseScoreFile, targetMuseScoreFile, true); if (ExportPNG) { museScore.ConvertMuseScoreToPNG(compressedMuseScoreFile, targetMuseScoreFile.Replace(MuseScoreApp.CompressedMuseScoreFileExt, MuseScoreApp.PNGFileExt), 96); } if (ExportPDF) { museScore.ConvertMuseScoreToPDF(compressedMuseScoreFile, targetMuseScoreFile.Replace(MuseScoreApp.CompressedMuseScoreFileExt, MuseScoreApp.PDFFileExt)); } if (ExtractVoice) { StoreVoiceOnlyVersion(tempDir, xmlFileName, museScore, GetFileVoiceName(outputDirectory)); } if (!_nextMode && xmlFileName.Name.EndsWith(Pattern + MuseScoreApp.XMLFileExt)) { for (int i = 1; i < 8; i++) { if (i == Pattern) { i++; } TrySaveNext(xmlFileName.FullName.Replace(Pattern + MuseScoreApp.XMLFileExt, i + MuseScoreApp.XMLFileExt), i); } } if (!_nextMode) { Process.Start("file://" + Path.GetDirectoryName(targetMuseScoreFile)); } // WriteBatchAndXML(Path.GetDirectoryName(targetMuseScoreFile) + "\\__generate" + // (Pattern > 0 ? Pattern.ToString() : "") + ".cmd"); } } catch (Exception ex) { throw new HandledErrorException("Fehler!", "Beim Speichern ist ein Fehler aufgetreten." + Environment.NewLine + Environment.NewLine + ex.Message + Environment.NewLine + ex.StackTrace); } finally { tempDir.Delete(true); } }
private void StoreVoiceOnlyVersion(DirectoryInfo tempDir, FileInfo xmlFileName, MuseScoreApp museScore, string targetMuseScoreVoiceFile) { if (!ExtractVoice) { return; } var mxmlVoiceOnlyFileName = tempDir.FullName + "\\" + xmlFileName.Name.Replace(MuseScoreApp.XMLFileExt, VoiceOnlySuffix + MuseScoreApp.XMLFileExt); File.Copy(xmlFileName.FullName, mxmlVoiceOnlyFileName); var mxmlVoiceDoc = new XmlDocument(); mxmlVoiceDoc.Load(mxmlVoiceOnlyFileName); foreach (XmlElement creditNode in mxmlVoiceDoc.SelectNodes("//credit").Cast<XmlElement>().ToList()) { // remove all existing credit nodes creditNode.ParentNode.RemoveChild(creditNode); } AppendCreditNode(mxmlVoiceDoc.DocumentElement, "595.238", "1626.98", "24", "center", "top", Title.Trim()); AppendCreditNode(mxmlVoiceDoc.DocumentElement, "1133.79", "1559.98", "12", "right", "top", GetComposerAndTexter()); mxmlVoiceDoc.Save(mxmlVoiceOnlyFileName); var part2Node = mxmlVoiceDoc.SelectSingleNode("//part[@id='P2']") as XmlElement; if (part2Node == null) { return; } part2Node.ParentNode.RemoveChild(part2Node); mxmlVoiceDoc.Save(mxmlVoiceOnlyFileName); var museScoreVoiceFile = museScore.ConvertXMLtoMuseScore(mxmlVoiceOnlyFileName); if (museScoreVoiceFile == null || !File.Exists(museScoreVoiceFile)) { throw new HandledErrorException("Fehler!", "\"Nur Stimme\" Version konnte nicht gespeichert werden"); } ProcessMuseScoreFile(museScoreVoiceFile, RemoveCaptionsTransformer, PageSettingsTransformer, AutoBreakTransformer); var compressedMuseScoreVoiceFile = museScore.ConvertMuseScoretoCompressedMuseScore(museScoreVoiceFile); File.Copy(compressedMuseScoreVoiceFile, targetMuseScoreVoiceFile, true); museScore.ConvertMuseScoreToPNG(compressedMuseScoreVoiceFile, targetMuseScoreVoiceFile.Replace(MuseScoreApp.CompressedMuseScoreFileExt, MuseScoreApp.PNGFileExt), 96); }
private void ConvertMusicXMLFile() { IsBusy = true; BusyText = "Konvertiere Datei..."; var task = Task.Factory.StartNew(() => { var museScore = new MuseScoreApp(); museScore.ConvertXMLtoMuseScore(CurrentDocument.FileName); }); task.ContinueWith(resultTask => { IsBusy = false; }); }