服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

分享――一个简单的mp3播放器的制作


  利用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"
  就可以了

扫描关注微信公众号