/// <summary> /// Do export to MusicXML file. /// </summary> /// <param name="sequence">A sequence to be exported.</param> /// <param name="file_path">A file path.</param> public void write(VsqFile sequence, string file_path) { var score = new scorepartwise(); score.version = "2.0"; score.identification = new identification(); score.identification.encoding = new encoding(); score.identification.encoding.software.Add(this.GetType().FullName); score.partlist = new partlist(); score.partlist.scorepart = new scorepart(); score.partlist.scorepart.id = "P1"; score.partlist.scorepart.partname = new partname(); score.partlist.scorepart.partname.Value = sequence.Track[1].getName(); var partlist = new List <scorepart>(); for (int i = 2; i < sequence.Track.Count; ++i) { var track = sequence.Track[i]; var scorepart = new scorepart(); scorepart.id = "P" + i; scorepart.partname = new partname(); scorepart.partname.Value = track.getName(); partlist.Add(scorepart); } score.partlist.Items = partlist.ToArray(); var quantized_tempo_table = quantizeTempoTable(sequence.TempoTable); score.part = sequence.Track.Skip(1).Select((track) => { var result = createScorePart(track, sequence.TimesigTable, quantized_tempo_table); quantized_tempo_table.Clear(); return(result); }).ToArray(); for (int i = 0; i < score.part.Length; i++) { score.part[i].id = "P" + (i + 1); } var serializer = new System.Xml.Serialization.XmlSerializer(typeof(scorepartwise)); using (var stream = new FileStream(file_path, FileMode.Create, FileAccess.Write)) { var writer = new System.Xml.XmlTextWriter(stream, System.Text.Encoding.UTF8); writer.Formatting = System.Xml.Formatting.Indented; writer.WriteStartDocument(); writer.WriteDocType("score-partwise", "-//Recordare//DTD MusicXML 2.0 Partwise//EN", "http://www.musicxml.org/dtds/partwise.dtd", null); var ns = new System.Xml.Serialization.XmlSerializerNamespaces(); ns.Add(string.Empty, string.Empty); serializer.Serialize(writer, score, ns); } }