VB2005使用类实现LRC歌词同步

来源:互联网 发布:知乎 防蓝光眼镜 编辑:程序博客网 时间:2024/05/01 08:57

 

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型,如"0037",这里需要你将当前播放时间做一定的处理,使其为时间标签的格式!即0000这样的!具体的格式处理方式相信做过播放器的朋友都会,此处不在赘述!

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



 

原创粉丝点击