C#winfrom播放器動態載入歌詞

來源:互聯網
上載者:User

標籤:sub   檔案路徑   family   odi   read   位元組   維數   擷取   dia   

上周我們進行了結業項目答辯,是播放器項目。有一個關於播放器變唱歌邊載入歌詞的方法特別有意思,像酷狗那樣子歌詞和歌曲同步滾播的樣子。

這裡的工具是Visual Studio 2013,使用語言是C#和.net技術。

 首先我們使用File.Exists(@"檔案路徑")判斷lrc歌詞檔案是否存在,如果存在的話讀取lrc檔案。

這裡可以用Regex,也可以用一個二維數組或兩個數組。本文是用的二維數組。

 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                 try11                 {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                             //else49                             //{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.大家有好的建議歡迎提出:)

C#winfrom播放器動態載入歌詞

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.