コード例 #1
0
ファイル: SongObject.cs プロジェクト: DrGurka/Play_Tabs
        /// <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);
        }