/// <summary> /// Loads all the chords and notes for the arrangement /// </summary> public ArrangementObject LoadArrangement(Arrangement arrangment) { XmlDocument document = new XmlDocument(); using (var inputStream = File.OpenRead(source)) { var psarc = new PlayStationArchive(); psarc.Read(inputStream, true); try { foreach (var entry in psarc.TOC) { if (entry.Name.Contains("songs") && entry.Name.Contains("arr") && entry.Name.EndsWith("_" + arrangment.ToString() + ".xml")) { psarc.InflateEntry(entry); using (var reader = new StreamReader(entry.Data, Encoding.UTF8)) { document.LoadXml(reader.ReadToEnd()); } break; } } } catch (Exception ex) { Console.WriteLine(ex); } finally { if (psarc != null) { psarc.Dispose(); psarc = null; } } } float averageTempo = float.Parse(document.GetElementsByTagName("averageTempo")[0].InnerText, CultureInfo.InvariantCulture); XmlNode node = document.GetElementsByTagName("transcriptionTrack")[0]; int noteCount = int.Parse(node["notes"].GetAttribute("count")); int chordCount = int.Parse(node["chords"].GetAttribute("count")); if (noteCount <= 0 && chordCount <= 0) { node = document.GetElementsByTagName("level")[0]; noteCount = int.Parse(node["notes"].GetAttribute("count")); chordCount = int.Parse(node["chords"].GetAttribute("count")); } ArrangementObject newArrangement = new ArrangementObject(averageTempo, noteCount, node["notes"].GetElementsByTagName("note"), chordCount, node["chords"].GetElementsByTagName("chord")); return(newArrangement); }