public static void ReadFromFile(ref LrcObject lrc, string path) { string pattern = @"((\[\d{1,2}\:\d{1,2}\.\d{2,3}\])|(\[\d{1,2}\:\d{1,2}\]))+"; using (StreamReader reader = new StreamReader(path)) { string temp; while ((temp = reader.ReadLine()) != null) { // 歌词 if (Regex.IsMatch(temp, pattern)) { foreach (LrcLine line in LrcLine.Pause(temp)) { lrc.LrcLines.Add(line); } } // 信息 else if (Regex.IsMatch(temp, LrcHeader.FormatString)) { LrcHeader header = LrcHeader.Pause(temp); lrc.LrcHeaders[(int)header.HeaderType].Text = header.Text; } // 其他则跳过 else { continue; } } } }
private void GenerateLine(LrcModel model, int lineIndex, LrcLine line, Position endStamp) { if (line.Items.Count <= 0) { return; } int i; StringBuilder sc = new StringBuilder(); for (i = 0; i < line.Items.Count - 1; i++) { Position position = null; for (int delta = 1; delta < line.Items.Count - i - 1; delta++) { LrcChar c = line.Items[i + delta]; if (c.Skip || c.Position.Time <= 0) { continue; } position = c.Position; break; } if (position is null) { for (int lineDelta = 1; lineDelta < model.Items.Count - lineIndex - 1; lineDelta++) { bool founded = false; LrcLine searchLine = model.Items[lineIndex + lineDelta]; for (int d = 1; d < searchLine.Items.Count; d++) { LrcChar c = searchLine.Items[d]; if (c.Skip || c.Position.Time <= 0) { continue; } position = c.Position; founded = true; break; } if (founded) { break; } } } if (position is null) { position = new Position(line.Items[i].Position.Time + 20); } sc.Append(GenerateChar(line.Items[i], position).generated); } (Position e, string generated) = GenerateChar(line.Items[i], endStamp); _sb.AppendLine( $"Dialogue: 0,{line.Items[0].Position.ConvertToSubtitleTimestamp()},{e.ConvertToSubtitleTimestamp()},Default,,0,0,0,,{sc}{generated}"); }
private void OnSetTargeting(LrcLine lrcline) { try { RootView.ScrollIntoView(lrcline); } catch (Exception) { // Ignore } }
private void FormatSaveFunc(string path) { // if (DataView.Items.Count == 0) return; List <LrcLine> Lines = new List <LrcLine>(); foreach (DataRow dr in dt.Rows) { Lines.Add(LrcLine.Pause("[" + dr[0] + "]" + dr[1])[0]); } LrcObject lrc = new LrcObject(); lrc.LrcHeaders = this.LrcHeaders; lrc.LrcLines = Lines; LrcAdapter.WriteToFile(ref lrc, path); }
public void TestReadMethod() { LrcObject lrc = new LrcObject(); LrcAdapter.ReadFromFile(ref lrc, @"..\..\..\LrcLib\TestRead.lrc"); Console.WriteLine("AR:\t{0}", lrc.LrcHeaders[(int)LrcHeader.Type.AR].Text); Console.WriteLine("AL:\t{0}", lrc.LrcHeaders[(int)LrcHeader.Type.AL].Text); Console.WriteLine("BY:\t{0}", lrc.LrcHeaders[(int)LrcHeader.Type.BY].Text); Console.WriteLine("TI:\t{0}", lrc.LrcHeaders[(int)LrcHeader.Type.TI].Text); Console.WriteLine("OFFSET:\t{0}", lrc.LrcHeaders[(int)LrcHeader.Type.OFFSET].Text); Console.WriteLine("Time\tText"); foreach (LrcLine line in lrc.LrcLines) { Console.WriteLine("{0}\t{1}", LrcLine.TimeToString(line.Time), line.Text); } }
private void DeleteLineButtonBase_OnClick(object sender, RoutedEventArgs e) { MessageBoxResult result = MessageBox.Show( "删除这行?", "删除", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No); if (result != MessageBoxResult.Yes) { return; } if (!(sender is Button s)) { return; } LrcLine line = s.DataContext as LrcLine; LrcModel.Current.RemoveLine(line); }