zoukankan      html  css  js  c++  java
  • C#winfrom播放器动态加载歌词

    上周我们进行了结业项目答辩,是播放器项目。有一个关于播放器变唱歌边加载歌词的方法特别有意思,像酷狗那样子歌词和歌曲同步滚播的样子。

    这里的工具是Visual Studio 2013,使用语言是C#和.net技术。

     首先我们使用File.Exists(@"文件路径")判断lrc歌词文件是否存在,如果存在的话读取lrc文件。

    这里可以用正则表达式,也可以用一个二维数组或两个数组。本文是用的二维数组。

     lrc文件也是文本文件,一句歌词就是一行文本。简单点理解就像数据库中的DataReader,一次读取一行文本(记录),然后我们使用substring方法分别截取到文本内的时间和歌词,放到数组中。

    文件大概就是这样子的。

    我们读取到了之后,播放器有一个属性,Ctlcontrols.currentPositionString:string; 获取当前进度,返回一个字符串格式的值。如“00:23”

    我们拿到这个值和“保存时间”的数组里的值进行匹配,判断media player播放的时间=此行时间,则让此行高亮。(用定时器一直刷新,保持同步)

     

    如此,就可以达到像酷狗那样子歌词和歌曲同步滚播的样子了。

    最后附上源代码

     1 #region 歌词
     2         string[,] lrc = new string[2, 500];//保存歌词和当前进度
     3         /// <summary>
     4         /// 读取并显示歌词
     5         /// </summary>
     6         public void ShowLrc()
     7         {
     8             if (this.axWindowsMediaPlayer2.playState == WMPLib.WMPPlayState.wmppsPlaying)
     9             {
    10                 try
    11                 {
    12                     //using:作用是使用完成后自动释放内存
    13                     //StreamReader:作用是用特定的编码从字节流中读取字节
    14                     using (StreamReader sr = new StreamReader(KTVUtil.songPath + @"" + PlayList.PlayingSongName() + ".lrc", Encoding.Default))
    15                     {
    16                         String line;
    17                         //循环读取每一行歌词
    18                         while ((line = sr.ReadLine()) != null)
    19                         {
    20                             //将读取到的歌词存放到数组中
    21                             for (int i = 0; i < 500; i++)
    22                             {
    23                                 if (lrc[0, i] == null)
    24                                 {
    25                                     lrc[0, i] = line.Substring(10, line.Length - 10);
    26                                     break;
    27                                 }
    28                             }
    29                             //将读取到的歌词时间存放到数组中
    30                             for (int i = 0; i < 500; i++)
    31                             {
    32                                 if (lrc[1, i] == null)
    33                                 {
    34                                     lrc[1, i] = line.Substring(1, 5);
    35                                     break;
    36                                 }
    37                             }
    38                         }
    39                         /***********动态显示歌词***************/
    40                         //获取播放器当前进度
    41                         string numss = this.axWindowsMediaPlayer2.Ctlcontrols.currentPositionString;
    42                         for (int i = 0; i < 500; i++)
    43                         {
    44                             if (lrc[1, i].Equals(numss))
    45                             {
    46                                 this.lblLrc.Text = lrc[0, i];
    47                             }
    48                             //else
    49                             //{
    50                             //    this.lblLrc.Text = "************";
    51                             //}
    52                         }
    53                     }
    54                 }
    55                 catch (Exception ex)
    56                 {
    57                     //MessageBox.Show("异常:" + ex.Message);
    58                 }
    59             }
    60         }
    61         /// <summary>
    62         /// 刷新歌词
    63         /// </summary>
    64         /// <param name="sender"></param>
    65         /// <param name="e"></param>
    66         private void timer5_Tick(object sender, EventArgs e)
    67         {
    68             ShowLrc();
    69         }
    70         #endregion

    ps.大家有好的建议欢迎提出:)

    欢迎提出意见或建议!!!
  • 相关阅读:
    10个有用的网站访问分析工具
    在 IIS6 ASP.NET 4.0 安装 最常遇到的四个问题
    [转]qUIpt:JavaScript Cache Library
    Windows Phone 7 Jump Start
    TFS GrantBackup Plan Permissions Error
    JQuery 专题
    IEnumberable<String> To String
    Charts Controls 开发系列2
    Script#
    SQL SERVER 经验、资料收录
  • 原文地址:https://www.cnblogs.com/gaofei-1/p/6175632.html
Copyright © 2011-2022 走看看