private CueSongInfo ReadTrackInfo(StreamReader reader, CueSongInfo model) { CueSongInfo info = model.Clone() as CueSongInfo; while (!reader.EndOfStream) { string str = reader.ReadLine().Trim(); if (string.IsNullOrEmpty(str)) { continue; } int splitpos = str.IndexOf(' '); string cmd = str.Substring(0, splitpos).ToUpper(); string value = str.Substring(splitpos).Replace('\"', ' ').Trim(); switch (cmd) { case "TITLE": info.Title = value.Trim(); break; case "PERFORMER": info.Artist = value.Trim(); break; case "GERNE": info.Genre = value.Trim(); break; case "YEAR": info.Year = value.Trim(); break; case "ISRC": info.Isrc = value.Trim(); break; case "INDEX": int timesplit = value.IndexOf(' '); string type = value.Substring(0, timesplit); string tstr = value.Substring(timesplit).Trim(); CueTime time = new CueTime(0, 0, 0); if (CueTime.TryParse(tstr, out time)) { if (type == "01") { info.StartTime = time; } else { info.EndTime = time; } } break; case "REM": string v2cmd = value.Substring(0, value.IndexOf(' ')).ToUpper(); string v2value = value.Substring(value.IndexOf(' ')); if (v2cmd == "DATE") { model.Year = v2value.Trim(); } else if (v2cmd == "GENRE") { model.Genre = v2value.Trim(); } break; case "TRACK": int t; if (int.TryParse(value.Substring(0, 2), out t)) { model.Track = t; } CueSongInfo song = ReadTrackInfo(reader, model); songs.Add(song); break; } } return(info); }