示例#1
0
文件: FSC.cs 项目: jwofles/ForkSO
        private void ReadFile(Stream stream)
        {
            var io = new StreamReader(stream);

            Notes            = new List <FSCNote>();
            RandomJumpPoints = new List <int>();
            VersionCode      = io.ReadLine();
            var line = io.ReadLine();

            while (line.StartsWith("#"))
            {
                line = io.ReadLine();
            }

            //Header
            string[] Head = line.Split('\t');
            MasterVolume = Convert.ToUInt16(Head[1]);
            Priority     = Convert.ToUInt16(Head[2]);
            Min          = Convert.ToUInt16(Head[3]);
            Max          = Convert.ToUInt16(Head[4]);
            Rows         = Convert.ToUInt16(Head[5]);
            Columns      = Convert.ToUInt16(Head[6]);
            Tempo        = Convert.ToUInt16(Head[7]);
            BPB          = Convert.ToUInt16(Head[8]);
            SelX         = Convert.ToUInt16(Head[9]);
            SelY         = Convert.ToUInt16(Head[10]);
            if (Head[11][0] != '-')
            {
                QuanX = Convert.ToUInt16(Head[11]);
            }
            if (Head[12][0] != '-')
            {
                QuanY = Convert.ToUInt16(Head[12]);
            }
            DiffX = Convert.ToUInt16(Head[13]);
            DiffY = Convert.ToUInt16(Head[14]);

            line = io.ReadLine();

            while (line.StartsWith("#") || line.StartsWith("cells"))
            {
                line = io.ReadLine();
            }

            while (!io.EndOfStream) //read notes
            {
                string   line2  = io.ReadLine();
                string[] Values = line2.Split('\t');
                if (!line.StartsWith("#") && Values.Length == 20)
                {
                    var note = new FSCNote()
                    {
                        Volume = Convert.ToUInt16(Values[1]),
                        Rand   = Values[2] != "0",
                        LRPan  = Convert.ToUInt16(Values[3]),
                        FBPan  = Convert.ToUInt16(Values[4]),
                        Rand2  = Values[5] != "0",

                        Fin   = Convert.ToUInt16(Values[6]),
                        FOut  = Convert.ToUInt16(Values[7]),
                        dly   = Convert.ToUInt16(Values[8]),
                        Rand3 = Values[9] != "0",
                        Loop  = Convert.ToUInt16(Values[10]),

                        Loop2  = Values[11] != "0",
                        Quant  = Convert.ToUInt16(Values[12]),
                        Prob   = Convert.ToUInt16(Values[13]),
                        pitchL = Convert.ToInt16(Values[14]),
                        pitchR = Convert.ToInt16(Values[15]),

                        Fast     = Values[16] != "0",
                        GroupID  = Convert.ToUInt16(Values[17]),
                        Stereo   = Values[18] != "0",
                        Filename = Values[19]
                    };
                    if (note.Rand)
                    {
                        RandomJumpPoints.Add(Notes.Count);
                    }
                    Notes.Add(note);
                }
            }

            io.Close();
        }