用VB制作MP3播放器---用MMControl控件播放M3U文件的实现

用VB制作MP3播放
----------用MMControl控件播放M3U文件的实现
(本文章来源于网络)
在以前,VB程序员大都以为MMControl控件在应付媒体文件方面不是很争气,笔者甚至在一些颇有权威的书籍上看到在探讨完这个控件之后
建议读者:如欲编制一个能播放MP3文件的播放器,请去相关控件。其实,这是对MMControl的误解。MMControl作为能对系统硬件进行操作和控制的控件,其功能是强大的,它对付MP3也不在话下!不信?我以前也不信——专家都这么以为嘛。可现在我信了:我在VB6.0、PWin98下试验成功!播放质量?呵呵,比Mediaplayer好不了多少。Bill的东西嘛,让人又爱又无奈……
  遗憾的是,MMCtrol控件不支持M3U列表文件。这得处理一下。谁叫M3u那么方便呢?
  我们知道,M3U其实是和TXT文件性质一样的东西,都是文本文件。M3U文件所存储的内容是一系列的媒体文件所在的二进制地址,如将M3U文件打开并把各个媒体文件所在位置的标志存入数组,就可以叫MMControl一一地播放了。考虑到资源的占用问题,笔者以下的实例将M3U文件的内容打开后添加到列表框,然后让MMControl进行处理,有兴趣的朋友可以试一下数组。
  本例需要:按钮若干;列表框一个;Timer一个;ProgressBar(进度条)一个;老M当然不能少了。
  详细代码如下:
Option Explicit
Dim MaxVal As Long 注释:进度条Max值变量
Dim MyInd As Integer 注释:播讲的文件索引变量
Dim sF As String 注释:要播放的M3U文件
Private Sub cmdNext_Click() 注释:“下一首”按钮代码
PlayNext
List1.SetFocus 注释:让按钮好看点,下同
End Sub
Private Sub cmdPause_Click() 注释:“暂停”按钮代码
MMControl1.Command = "Pause"
List1.SetFocus
End Sub
Private Sub cmdPlay_Click() 注释:“播放”按钮代码
List1.SetFocus
If MMControl1.Command = "Stop" Or MMControl1.Command = "Pause" Then
MMControl1.Command = "Play"
Else
Call PlayMe 注释:交给PlayMe处理
End If
End Sub
mp3制作
Private Sub cmdExit_Click() 注释:“退出”按钮代码
MMControl1.Command = "close" 注释:关闭以释放资源
End
End Sub
Private Sub cmdPre_Click() 注释:“前一首”按钮代码
Timer1.Enabled = False
List1.SetFocus
If MyInd = 0 Then 注释:当前是第一首则播放最后一首
List1.ListIndex = List1.ListCount - 1
Else 注释:否则播放前一首
List1.ListIndex = MyInd - 1
End If
MyInd = List1.ListIndex 注释:这个变量要记得改哟
Call PlayMe
End Sub
Private Sub Form_Load() 注释:程序加载
Timer1.Enabled = False
Timer1.Interval = 1000
List1.BackColor = vbBlack
List1.ForeColor = vbYellow
MMControl1.Visible = False
MyInd = 0
cmdOpen.Value = True 注释:“打开”按钮被按下
注释:OpenM3u 注释:打开M
3U文件
注释:PlayMe 注释:播放
End Sub
Private Sub cmdOpen_Click() 注释:“打开”按钮代码
On Error GoTo openerr:
List1.Clear
CommonDialog1.Filter = "(*.m3u)|*.m3u" 注释:这个不用说了吧
CommonDialog1.ShowOpen
sF = CommonDialog1.FileName
OpenM3u 注释:打开M3U文件
Exit Sub
openerr:
Timer1.Enabled = False 注释:出错则不能让计时器工作
注释:出错信息自己写吧
End Sub
注释:当点击右上角的“×”按钮时
Private Sub Form_Unload(Cancel As Integer)
MMControl1.Command = "Close" 注释:关闭设备以释放资源
End Sub
Private Sub List1_dblClick() 注释:双击列表框事件
MyInd = List1.ListIndex
cmdPlay.Value = True
End Sub
注释:判断是否要播放下一首
Private Sub MMControl1_StatusUpdate()
If MMControl1.Position = MMControl1.Length Then
PlayNext
End If
End Sub
Private Sub PlayMe() 注释:播放媒体文件
With MMControl1 注释:以下语句是不是有点罗嗦?
.
FileName = List1.List(MyInd)
.Command = "stop"
.Command = "close"
.Command = "Open"
.Command = "play"
End With
MaxVal = MMControl1.Length
Timer1.Enabled = True
Me.Caption = List1.List(MyInd) 注释:显示正在播放的文件名称
ProgressBar1.ToolTipText = "播放总数:" & List1.ListCount & "首"
注释:注释:显示播放文件总数
End Sub
Private Sub Timer1_Timer()
注释:进度条的Max和Value值
ProgressBar1.Max = MaxVal
ProgressBar1.Value = MMControl1.Position
End Sub
Private Sub PlayNext() 注释:播放下一首
Timer1.Enabled = False
ProgressBar1.Value = 0
MyInd = MyInd + 1 注释:当然加1了
If MyInd >= List1.ListCount Then MyInd = 0
Call PlayMe 注释:呵呵,偷懒一下吧
List1.ListIndex = MyInd
End Sub
Private Sub OpenM3u() 注释:打开M3U文件并存入内存
On Error GoTo M3uErr
Dim AllLines As New Collection 注释:内存中集全
Dim CurrentLine As Long 注释:当前行集合索引
Dim nextLine As String 注释:从文件中读出的每一行
Dim InFile As Integer 注释:文件的描述符
InFile = FreeFile
Open sF For Input As InFile 注释:打开文件
While Not EOF(InFile)
Line Input #InFile, nextLine
AllLines.Add nextLine
Wend
Close InFile
Dim i As Integer
注释:以下为提取各行
For i = 0 To AllLines.Count - 1
CurrentLine = CurrentLine + 1
If AllLines.Count < CurrentLine Then
CurrentLine = 1
End If
If AllLines.Count > 0 Then 注释:当然要加入列表框啦
List1.AddItem AllLines.Item(CurrentLine)
End If
Next i
MMControl1.FileName = List1.List(0) 注释:老M终于有文件要处理了
List1.ListIndex = 0
注释: 列表框第一项高亮——老M就是靠它来判断下一首是什么
Exit Sub
M3uErr:
注释:......我累了
End Sub
  最后想提醒一下:由于MMControl控件直接对MCI发出各种指令,在编程时需要格外谨慎,否则……去尝试一下吧!

本文发布于:2024-09-22 22:26:17,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/350704.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:注释   文件   播放   控件   打开
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议