天天看點

VB2005使用類實作LRC歌詞同步

VB2005使用類實作LRC歌詞同步

音樂是每天必不可缺的元素,音樂播放軟體更是如雨後春筍般越來越多。經典的千千靜聽,酷酷的酷我音樂盒,想必是愛音樂的人們離不開的軟體!這些軟體都有一個經典的功能——歌詞同步,想不想給自己做的播放器也加上這個功能呢?Follow me!

為了實作歌詞同步,有必要熟悉歌詞檔案的工作機制:

現在主流的歌詞檔案為lrc格式。可以用記事本打開!它有三部分組成,分别是:資訊,時間标簽與歌詞,如下面這段:

[ti:七裡香]

[ar:周傑倫]

[al:七裡香]

[by:汐木]

[00:27.68]窗外的麻雀

[00:30.63]在電線杆上多嘴

[00:34.24]你說這一句

[00:37.29]很有夏天的感覺

[00:40.99]手中的鉛筆

[00:44.09]在紙上來來回回

[00:47.28]我用幾行字形容你是我的誰

[00:54.06]秋刀魚 的滋味

[00:57.44]貓跟你 都想了解

[01:01.21]初戀的香味就這樣被我們尋回

[01:07.41]那溫暖 的陽光

[01:10.41]像剛摘的 鮮豔草莓

[01:13.86]你說你舍不得吃掉這一種感覺

[01:20.63]雨下整夜

[01:22.73]我的愛溢出就像雨水

[ti:七裡香][ar:周傑倫][al:七裡香][by:汐木]是資訊部分,用來說明歌曲名,歌手,專輯,歌詞制作人。這部分可有可無。

[00:27.68]就是一個時間标簽,而後面的自然就是歌詞了!

知道了lrc檔案的結構,不難想象其大緻原理:将播放時間與時間标簽對比,如果一樣的話,顯示該标簽後的歌詞。

下面我就教大家如何建立一個實作歌詞同步的類。為什麼要用類呢?因為它可以重複使用代碼,易于調用,容易移植!

開始了~

(1)打開VB2005,建立項目-選擇類庫

(2)将class1.vb改為lrcshow.vb

(3)将Public Class Class1改為Public Class lrcshow

(4)使用Imports System.IO引用IO命名空間(這個放在所有代碼的最上面)

(5)下面使具體實作的代碼,我做了注釋,很簡單!

Imports System.IO

Public Class lrcshow

    '定義包含歌詞的數組,這個數組中的歌詞用于背景處理,不會被看到    Dim LrcList As New ArrayList

    '這個數組可有可無,主要貯存去除了時間标簽的歌詞,便于以後擴充功能

    Public ShowList As New ArrayList

    '要對比的時間标簽

    Dim LrcTimeLabel As String

    '最終顯示的歌詞

    Public Lrc As String

  '定義OpenLrcFile函數,這個函數可以把指定的lrc打開,并将歌詞存入LrcList以及  ShowList   

Public Function OpenLrcFile(ByVal LrcFileName As String)

      '打開lrc歌詞

    Dim temp_file_stream As New FileStream(LrcFileName, FileMode.Open)

        Dim i As Integer

        Dim a As Integer

        Dim St_Reader As New StreamReader(temp_file_stream, System.Text.Encoding.Default)

      '一行一行地存入數組

        Do Until St_Reader.EndOfStream = True

            LrcList.Add(St_Reader.ReadLine)

            i = i + 1

        Loop

        For a = 0 To LrcList.Count - 1

            ShowList.Add(Microsoft.VisualBasic.Right(LrcList(a), (Len(LrcList(a)) - LrcList(a).LastIndexOf("]") - 1)))

        Next

        Return (ShowList.Count)

    End Function

    Public Function Show(ByVal LrcTimeLabel As String)

        Dim i As Integer

        Dim TimeFind As String

      '将指定時間标簽與數組中的每一個時間标簽比較        For i = 0 To LrcList.Count - 1

            TimeFind = LrcList(i)

            If TimeFind.IndexOf(LrcTimeLabel) <> -1 Then

              '如果一緻,取得該時間标簽後的歌詞             

  Lrc = Microsoft.VisualBasic.Right(LrcList(i), (Len(TimeFind) - TimeFind.LastIndexOf("]") - 1)) 

            End If

        Next

    End Function

End Class

這樣就完成了這個類!選擇生成-生成lrcshow。這樣就會生成一個lrcshow.dll的檔案,位于解決方案檔案夾中的debug檔案夾中!如圖:

下面就是對類的調用:

(1)在需要調用該類的工程中選擇:項目-添加引用-浏覽 選擇lrcshow.dll的路徑,即可完成引用

完成後如下圖:可以看lrcshow已經加入引用:

(2) 建立對象

要使用一個類必須建立相應的對象才可以!

建立對象:

  Dim lrc As New lrcshow.lrcshow

載入歌詞:

    lrc.OpenLrcFile("E:/多媒體/ttplayer/Lyrics/周傑倫 - 千裡之外.lrc")

同步顯示:調用show後,lrc.lrc即為目前歌詞

      lrc.Show("目前的播放時間")

              TextBox1.Text = lrc.Lrc

注意:"目前的播放時間"這一個參數要是string型,如"00:37",這裡需要你将目前播放時間做一定的處理,使其為時間标簽的格式!即00:00這樣的!具體的格式處理方式相信做過播放器的朋友都會,此處不在贅述!

效果如下:我做的仿魅族播放器: