利用api函数[mcisendstring]可以轻松实现mp3音乐文件的播放。下面这段程序实现了mp3播放的大部分常规操作,对其稍加修改,做一个100kb大小的mp3播放器轻而易举
启动vb程序,在窗体上放置6个命令按钮,三个标签,一个公用对话框、一个进度条、一个状态栏和一个计时器,窗本的布置请参考附图
按钮"open mp3 file"是用来打开对话框选择mp3文件,其他5个按钮分别为play(播放)、pause(暂停)、stopplay(停止播放)、back(向后跳跃)、prew(向前跳跃)。label1用来表示歌曲当前时间;label2放在时度条的最左边,caption属性为"00:00";lable3放在时度条的右边,用来表示歌曲总长。
下面就可以编写代码了。首先在窗体的"通用声明"部分声明函数
private declare function mcisendstring lib "winmm.dll" alias "mcisendstringa"(byval lpstrcommand as string,byval lpstrretumstring as string,byval ureturnlength as long,byval hwndcallback as long) as long
dim mfn as string
下面就是各个对象的代码了:
private sub form_load()
mfn=""
play.enabled=false
pause.enabled=false
stopplay.enabled=false
back.enabled=false
prew.enabled=false
timer1.enabled=false
timer1.interval=500
end sub
private sub open_click()
on error goto err
with commondialog1
.cancelerror=true
.filter="音乐文件|*.mp3;*.wav;*.mid"
.flags=cdlofnnochangedir and cdlofnpathmustexist
.action=1
stopplay_click '停止按钮同时可以设备初始化
mfn=.filename '这个程序中文件名一定不能带空格
form1.caption=.filename
play.enabled=true
end with
play_click
exit sub
err:
end sub
private sub play_click()
on error resume next
dim t as long
t=mcisendstring("open " + mfn,0&,0,0) 'open后边的空格一定不能丢
dim ret as string * 128
t=mcisendstring("status " + mfn + " length",ret,128,0)
'显示歌曲总长
ret=left(ret,8)
if ret<>"" then
progressbar1.min=0
progressbar1.max=val(ret)
label3.caption=gettime(val(ret))
end if
play.enabled=false
pause.enabled=true
stopplay.enabled=true
back.enabled=true
prew.enabled=true
t=mcisendstring("status " + mfn +" mode",ret,128,0)
'得到设备的当前状态,是播放还是暂停等等
ret=left(ret,8)
statusbar1.panels(1).text=ret
'在状态栏显示播放状态
t=mcisendstring("play " + mfn + " form " + str(progressbar1.value),0&,0,0)
'开始播放
timer1.enabled=true
end sub
private sub pause_click()
t%=mcisendstring("pause " + mfn,0&,0,0)
'发出暂停的命令
play.enable=true
pause.enabled=false
stopplay.enabled=true
back.enabled=false
prew.enabled=false
end sub
private sub stopplay_click()
t%=mcisendstring("stop " + mfn,0&,0,0)
t%=mcisendstring("close " + mfn,0&,0,0)
'停止播放
play.enabled=true
pause.enabled=false
stopplay.enabled=false
back.enabled=false
prew.enabled=false
end sub
private sub back_click()
t%=mcisendstring("play " + mfn + " from " + str(progressbar1.value-(progressbar1.max/10)),0&,0,0) '向后跳一小段再播放
end sub
private sub prew_click()
t%=mcisendstring("play " + mfn + " from " + stri(progressbar1.value+(progressbar1.max/10)),0&,0,0) '向前跳一小段再播放
end sub
private sub timer1_timer()
dim t as long
dim ret as string * 128
t=mcisendstring("status " + mfn + " position",ret,0,0)
'得到当前播放位置
ret=left(ret,8)
progressbar1.value=val(ret)
label1.caption=gettime(val(ret))
'显示歌曲当前时间
if progressbar1.value=progressbar1.max then
stopplay_click
end if
t=mcisendstring("status " + mfn + " mode",ret,128,0)
ret=left(ret,8)
statusbar1.panels(1).text=ret
end sub
private sub form_unload(cacel as integer)
t%=mcisendstring("stop " + mfn,0&,0,0)
t%=mcisendstring("close " + mfn,0&,0,0)
end sub
private function gettime(position as long) as string
'这个函数的功能是把以长整型表示的时间转换为电子钟式的"**:**"
dim min,sec
min=position/1000
min=min/60
sec=min-int(min)
min=int(min)
sec=60 * sec / 100
sec=int(sec * 100)
gettime=str(min) + ":" + str(sec)
end function
图中5个控制按钮,其实是把字体设为"webdings",让它们的caption属性分别为"4" ";" "<" "7" "8"
就可以了
闽公网安备 35060202000074号