public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName) { //[01:05.99]I've been walking in the same way as I do _errorCount = 0; var header = new StringBuilder(); foreach (string line in lines) { if (line.StartsWith('[') && _timeCode.Match(line).Success) { string s = line; s = line.Substring(1, 8); string[] parts = s.Split(new[] { ':', '.' }, StringSplitOptions.RemoveEmptyEntries); if (parts.Length == 3) { try { int minutes = int.Parse(parts[0]); int seconds = int.Parse(parts[1]); int milliseconds = int.Parse(parts[2]) * 10; string text = line.Remove(0, 9).Trim().TrimStart(']').Trim(); var start = new TimeCode(0, minutes, seconds, milliseconds); var p = new Paragraph(start, new TimeCode(0, 0, 0, 0), text); subtitle.Paragraphs.Add(p); } catch { _errorCount++; } } else { _errorCount++; } } else if (line.StartsWith("[ar:")) // [ar:Lyrics artist] { if (subtitle.Paragraphs.Count < 1) header.AppendLine(line); } else if (line.StartsWith("[al:")) // [al:Album where the song is from] { if (subtitle.Paragraphs.Count < 1) header.AppendLine(line); } else if (line.StartsWith("[ti:")) // [ti:Lyrics (song) title] { if (subtitle.Paragraphs.Count < 1) header.AppendLine(line); } else if (line.StartsWith("[au:")) // [au:Creator of the Songtext] { if (subtitle.Paragraphs.Count < 1) header.AppendLine(line); } else if (line.StartsWith("[length:")) // [length:How long the song is] { if (subtitle.Paragraphs.Count < 1) header.AppendLine(line); } else if (line.StartsWith("[by:")) // [by:Creator of the LRC file] { if (subtitle.Paragraphs.Count < 1) header.AppendLine(line); } else if (!string.IsNullOrWhiteSpace(line)) { if (subtitle.Paragraphs.Count < 1) header.AppendLine(line); _errorCount++; } else if (subtitle.Paragraphs.Count < 1) { header.AppendLine(line); } } subtitle.Header = header.ToString(); int max = subtitle.Paragraphs.Count; for (int i = 0; i < max; i++) { Paragraph p = subtitle.Paragraphs[i]; while (_timeCode.Match(p.Text).Success) { string s = p.Text.Substring(1, 8); p.Text = p.Text.Remove(0, 10).Trim(); string[] parts = s.Split(new[] { ':', '.' }, StringSplitOptions.RemoveEmptyEntries); try { int minutes = int.Parse(parts[0]); int seconds = int.Parse(parts[1]); int milliseconds = int.Parse(parts[2]) * 10; string text = GetTextAfterTimeCodes(p.Text); var start = new TimeCode(0, minutes, seconds, milliseconds); var newParagraph = new Paragraph(start, new TimeCode(0, 0, 0, 0), text); subtitle.Paragraphs.Add(newParagraph); } catch { _errorCount++; } } } subtitle.Sort(Enums.SubtitleSortCriteria.StartTime); int index = 0; foreach (Paragraph p in subtitle.Paragraphs) { p.Text = Utilities.AutoBreakLine(p.Text); Paragraph next = subtitle.GetParagraphOrDefault(index + 1); if (next != null) { if (string.IsNullOrEmpty(next.Text)) { p.EndTime = new TimeCode(next.StartTime.TotalMilliseconds); } else { p.EndTime.TotalMilliseconds = next.StartTime.TotalMilliseconds - Configuration.Settings.General.MinimumMillisecondsBetweenLines; } if (p.Duration.TotalMilliseconds > Configuration.Settings.General.SubtitleMaximumDisplayMilliseconds) { double duration = Configuration.Settings.General.SubtitleMaximumDisplayMilliseconds; p.EndTime = new TimeCode(p.StartTime.TotalMilliseconds + duration); } } else { double duration = Utilities.GetOptimalDisplayMilliseconds(p.Text, 16) + 1500; p.EndTime = new TimeCode(p.StartTime.TotalMilliseconds + duration); } index++; } subtitle.RemoveEmptyLines(); subtitle.Renumber(); }