| 网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 |
![]() |
| Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道 |
网管联盟bitsCN_com
二、播放功能实现
播放音频文件的方法很多,本文采用“Microsoft MultiMedia Control”控件(MCI32.OCX)实现,在调用Multimedia MCI控件之前,须要执行“工程\部件”菜单命令,将“Microsoft Multimedia Controls”前的方框选中,确定返回,在工具箱中便会出现Multimedia 控件图标,把 Multimedia 控件添加到窗体上,命名为Mci。
1、MCI控件的部分方法和属性如下: 中国网管论坛bbs.bitsCN.com
Mci.FileName = Mp3 '文件名
Mci.Command = "Open" '打开
Mci.Command = "Play" '播放
Mci.Command = "Stop" '停止
Mci.Command = "Close" '关闭
Mci.Position:当前播放时间(毫秒)
Mci.Length:总的播放时间(毫秒) 网管u家u.bitscn@com
2、取得Windows临时文件夹
把音频文件和歌词文件都放在程序同文件夹中,且名称都为Song(扩展名分别为MP3、LRC),程序运行时,将音频文件复制到Windows的临时文件夹中,并对其进行播放。取得Windows临时文件夹通过API函数GetTempPath实现,编程方法和核心代码如下: 中国网管联盟bitsCN.com
Function WinTempDir() As String
Dim Tmp As String
Dim tP As String
Tmp = Space$(255)
Call GetTempPath(Len(Tmp), Tmp)
tP = Left(Trim$(Tmp), Len(Trim$(Tmp)) - 1)
If Right$(tP, 1) <> "\" Then
tP = tP + "\"
End If
WinTempDir = tP
End Function
3、读入歌词
在播放音频文件前,将当前文件夹中的歌词从文件中读入到列表框控件中,在播放的时候,可以通过播放时间提取歌词并显示,读入歌词文件的编程方法和核心代码如下: 网管联盟bitsCN@com
Function OpenLrc()
'Lrc为歌词文件名
Open Lrc For Input As #1
While Not EOF(1)
Line Input #1, S
If Len(S) > 0 Then List1.AddItem S
Wend
Close #1
End Function
4、程序初始化
程序运行时取得当前文件夹和Windows临时文件夹,完成音频文件复制,读入歌词,同时删除当前文件夹中的音频文件和歌词文件,并开始音频播放,编程方法和核心代码如下: 网管网www.bitscn.com
Private Sub Form_Load()
Pa = App.Path
tPa = WinTempDir
tMp3 = Pa + "Song.mp3"
Mp3 = tPa + "Song.mp3"
Lrc = Pa + "Song.lrc"
FileCopy tMp3, Mp3
Call OpenLrc '歌词
Kill tMp3: Kill Lrc
'以上删除了音频文件和歌词文件,在程序调试期间,应取消此功能
Mci.FileName = Mp3
Mci.Command = "Open"
Mci.Command = "Play"
End Sub 网管bitscn_com
5、歌词同步显示
在音频播放时,通过定时器控件,获取当前音频播放时间(MM:SS,秒级),然后在列表框中查找当前时间对应的歌词,找到则显示歌词,编程方法和核心代码如下:
网管网www_bitscn_com
'转换播放时间格式
Function tFormat(iPos) As String
M = iPos / 1000 \ 60 '分
S = iPos / 1000 Mod 60 '秒
If M < 10 Then Ret = "0"
Ret = Ret + CStr(M) + ":"
If S < 10 Then Ret = Ret + "0"
Ret = Ret + CStr(S)
tFormat = Ret
End Function
'查找歌词位置
Function ListIdx(ItemTxt) As Integer
For I = 0 To List1.ListCount - 1
P = InStr(1, List1.List(I), ItemTxt)
If P > 0 Then
ListIdx = I: Exit Function
End If
Next
ListIdx = -1
End Function
'同步显示歌词
Private Sub Timer1_Timer()
SetFormTop Me, True '窗体置顶
'窗体置顶
Function SetFormTop(iForm As Form, iFlag As Boolean)
If iFlag = True Then
SetWindowPos iForm.hwnd, -1, 0, 0, 0, 0, 3
Else
SetWindowPos iForm.hwnd, -2, 0, 0, 0, 0, 3
End If
End Function
'窗体移动准备
Private Sub Frame1_MouseDown(参数略)
If Button = 1 Then
mX = X: mY = Y: mV = 1
End If
End Sub
'移动窗体
Private Sub Frame1_MouseMove(参数略)
If Button = 1 And mV = 1 Then
Me.Left = Me.Left + X - mX
Me.Top = Me.Top + Y - mY
End If
End Sub
'移动结束
Private Sub Frame1_MouseUp(参数略)
mV = 0
7、编译运行
编译程序、运行,可以看到音频播放的同时,歌词在同步显示,如图2所示。
网管网www_bitscn_com
图2 程序运行 网管u家u.bitsCN.com
三、封装的实现
上面已经实现了音频文件的播放与歌词的同步显示,但播放的是同文件夹中的音频文件,使用的是同文件夹中的歌词文件,实现了千千静听的同步显示播放功能。但如何将音频文件和歌词文件封装成一个可执行的包呢?在可执行包运行的时候,如何自动运行包中的音频播放器从包中读入歌词并播放包中的音频文件呢?
1、用WinRAR实现
WinRAR可以实现将多个文件按自解压方式压缩成一个可执行的文件,而且可以设置解压后自动运行其中的某个程序(很多安装程序就是这样做的),利用这个方法,我们可以把上面设计的播放器和音频文件、歌词文件封装成一个可执行的包。当运行可执行包时,将自动释放包中的播放器、音频文件、歌词文件,并自动运行播放器开始播放。但这样有三个缺点:一是解压后可以看见音频文件和歌词文件,二是程序中使用的MCI播放控件无法自动注册,三是WinRar制作的压缩包在解压时有提示,需要用户进行解压确认。
2、用VB-PowerWrap实现
VB-PowerWrap是发布VB程序的一个优秀的安装程序制作工具,她通过扫描一个VB的工程文件,自动将该工程所需要的文件加入到包中,同时可以添加其它任何类型的文件到包中,并创建一个包含所有必要文件和相关文件的可执行包供程序员发布。VB-PowerWrap使用了超强的压缩模块,能对所用的动态库文件进行压缩,这样可以创建出最小的EXE文件。该软件可以用于VB4、5、6版本中。
1)、安装并运行VB-PowerWrap;
2)、点击界面上的【VB工程】按钮,在弹出的对话框中,点击右上方的图标,选择刚编译的执行程序文件名并打开,随后选择工程文件名并打开;这时可看到你编制的程序所依赖的文件列表,从左下方选择你所使用的VB版本,然后点击完成按钮返回;
3)、添加音频文件和歌词文件
通过软件界面上的【添加】按钮完成音频文件和歌词文件的添加,如图3所示。 网管u家u.bitsCN.com
图3 程序打包 中国网管联盟bitsCN.com
4)、创建压缩包
在链接工程和添加好其它文件之后,就可以点击软件界面上的【创建】按钮,几秒钟后就生成一个独立的执行程序包了。到此为止,新建立的执行程序就可以在其它任何Windows平台上独立运行了。
【编程后记】
本文建立的VB工程和程序,具有通用性,你现在要做的就是,从网上下载你喜欢的歌曲文件和歌词文件,并以Song为文件名放到工程的同文件夹中,这个工作是很轻松的,然后通过VB-PowerWrap工具进行打包,这样就形成了能自动播放的音频文件。
值得一提的是,你的程序经过VB-PowerWrap的封装,就变得相当精干了。源码下载http://family1.chinaok.com/down/200629/scode.rar
中国网管论坛bbs.bitsCN.com
|
0
|
评论加载中…