VB2005使用類實現LRC歌詞同步

2021-04-27 22:35:52 字數 3478 閱讀 6027

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,此處不在贅述!

隨機雜湊的實現(VB2005)

編寫過程式的人都知道,隨機雜湊是我們經常要實現的問題。什麼是隨機雜湊?比方說,現在有乙個數列1 2 3 4 5 6。我希望得到乙個隨機的打亂順序的數列,例如 2,5,6,3,4,1。這個新的數列就是原數列的隨機雜湊。實際情況中,我們經常需要給定乙個範圍,就能得到乙個隨機雜湊。比方說 給定 2,7 通...

遍歷組合的實現 VB2005

在數學的統計分支裡,排列與組合是乙個很重要的分支。在各種實際應用中,排列與組合也扮演了重要的角色。舉例來說,安排人員參加活動可以看作是組合的應用。比方說,現在有十個人,選出其中的五個人參加某項集體活動。由於彼此之間有著脾氣性格等因素,所以,不同的人員組合有著不同的工作效率。現在,要求你找出效率最高的...

遍歷組合的實現 VB2005

在數學的統計分支裡,排列與組合是乙個很重要的分支。在各種實際應用中,排列與組合也扮演了重要的角色。舉例來說,安排人員參加活動可以看作是組合的應用。比方說,現在有十個人,選出其中的五個人參加某項集體活動。由於彼此之間有著脾氣性格等因素,所以,不同的人員組合有著不同的工作效率。現在,要求你找出效率最高的...