Exemple #1
0
        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;
                    }
                }
            }
        }
Exemple #2
0
        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
     }
 }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }