/// <summary> /// /// </summary> /// <param name="Lines"></param> /// <param name="bms"></param> /// <returns></returns> static private Bms ParseChannel(this Bms bms) { Regex channelRegex = new Regex("#(?<bar>[0-9]{3})(?<channel>[0-9A-Za-z]{2}):(?<value>[0-9a-zA-Z]*)"); foreach (var line in bms.ErrorLines) { Match channel = channelRegex.Match(line.Value); if (channel.Success) { if (channel.Success) { try { var bar = int.Parse(channel.Groups["bar"].Value); var ch = channel.Groups["channel"].Value; var value = channel.Groups["value"].Value; var bmobject = BmObject.Read(bar, ch, value); foreach (var b in bmobject) { bms.ChannelObjects.Add(SetMilliSecond(b, bms.RhythmObjects)); } } catch { throw; } bms.ErrorLines.Remove(line.Key); continue; } } } return(bms); }
/// <summary> /// リズムや小節に関するチャンネル情報を読み込みます /// ToDO:同時の場合の順 /// </summary> /// <param name="Lines"></param> /// <param name="bms"></param> /// <returns></returns> static private Bms ParseRhythmChannel(this Bms bms) { Regex rhythmRegex = new Regex(@"#(?<bar>[\d]{3})(?<channel>02|03|08|09):(?<value>[0-9a-zA-Z\.]*)"); bms.RhythmObjects.Add(BpmObject.InitBpmObject(bms.Header.InitBpm)); foreach (var line in bms.ErrorLines) { Match rhythm = rhythmRegex.Match(line.Value); if (rhythm.Success) { try { var bar = int.Parse(rhythm.Groups["bar"].Value); var channel = rhythm.Groups["channel"].Value; string value = rhythm.Groups["value"].Value; var bmobject = BmObject.Read(bar, channel, value); bms.RhythmObjects.AddRange(bmobject); } catch { throw new Exception($"{line.Key}:{line.Value}"); throw; } bms.ErrorLines.Remove(line.Key); continue; } } bms.RhythmObjects = bms.RhythmObjects /*.Select(r => * { * if (r.Channel != "08") return r; * var ch8 = (BpmObject)r; * ch8.BpmValue = bms.BpmDefinisitons[ch8.Value]; * return ch8; * })*/ .OrderBy(r => r.Position).ToList(); return(bms); }