Yesky首页| 产品报价| 行情| 手机 | 数码 | 笔记本 | 台式机 | DIY硬件 | 外设 | 网络 | 数字家庭 | 评测 | 软件 | e时代 | 游戏 | 图片 | 壁纸 | 群乐 | 社区 | 博客 | 下载
软件频道>开发者网络>微软开发专栏>ASP.NETC#VB.NETVC.NET技术专题XML|软件频道产品中心群乐下载群乐:大家耍QQ
您现在的位置: 天极网 > 开发频道 > 微软开发专栏 > C#中利用mediaplayer打造mp3播放器
全文

C#中利用mediaplayer打造mp3播放器

2005-08-09 08:30 作者: sea702 出处: BLOG 责任编辑:方舟
天极软件专题专区精选
Google专区 POPO专区 QQ专区 QQ挂机 了解Web2.0
Flash MX 视频教程 Photoshop视频教程 网页设计视频教程 照片处理数字暗房
PPT动画演示教程 Excel动画教程集 Word动画演示教程 Windows Vista专区
特洛伊木马专区 黑客知识教程专区 防火墙应用专区 注册表应用专区
Windows API开发专区 网络编程专区 VB数据库编程专区 图像处理与多媒体编程

  利用Window Media Player 控件自己做一款小巧的mp3播放器来听音乐 ,是不是很享受呢?今天刚写出来的,听听mp3感觉还不错哦。 闲话少说,进入正题。

  Mp3播放器主要完成下列功能:

  1. 添加歌曲,可以添加单个乐曲或者指定文件夹内包括其子文件夹内的所有mp3乐曲到播放列表。
 
  2. 删除指定歌曲或所有歌曲。

  3. 播放的控制。包括选择上一首,下一首播放,顺序播放,循环播放和随机播放。循环播放又分单个歌曲的循环播放和所有歌曲的循环播放。

  首先建立类player。

public class Player
{
 private AxWMPLib.AxWindowsMediaPlayer myPlayer;
 private string[] playList;
 private int numOfMusic;
 private int currentPlay;

 public int NumOfMusic
 {
  get
  {
   return numOfMusic;
  }
 }

 public WMPLib.WMPPlayState playstate
 {
  get
  {
   return myPlayer.playState;
  }
 }

 public string PlayList(int num)
 {
  return playList[num];
 }

 public Player(AxWMPLib.AxWindowsMediaPlayer mediaPlayer)
 {
  myPlayer = mediaPlayer;
  playList = new string[1000];
  numOfMusic = 0;
 }

 public void AddFile(string path)
 {
  if(numOfMusic < 1000)
  {
   numOfMusic ++;
   playList[numOfMusic] = path;
  }
 }

 public void DelFile(int selectNum)
 {
  for(int i = selectNum; i <= numOfMusic - 1; i++)
  {
   playList[i] = playList[i + 1];
  }
  numOfMusic --;
 }

 public void play(int selectNum)
 {
  myPlayer.URL = playList[selectNum];
  currentPlay = selectNum;
 }

 public int NextPlay(int type)
 {
  /* type = 0 顺序

  type = 1 重复播放全部
  type = 2 重复播放一首
  type = 3 随机播放

  */

  switch (type)
  {
   case 0:
    currentPlay ++;
    if(currentPlay > numOfMusic)return 0;
    else return currentPlay;
   case 1:
    currentPlay ++;
    if(currentPlay > numOfMusic) return 1;
    else return currentPlay;
   case 2:
    return currentPlay;
   case 3:
    Random rdm = new Random(unchecked((int)DateTime.Now.Ticks));
    currentPlay = rdm.Next() % numOfMusic;
    if(currentPlay == 0) return numOfMusic;
    else return currentPlay;
   default:
    return 0;
  }
 }
}

  Player类中包括一个windowsMediaPlayer对象myPlayer,一个存储播放列表的数组playlist,记录歌曲总数的numOfMusic,以及当前播放的歌曲对应列表中的序号currentplay; 另外有四个方法分别是Play,AddFile,DelFile,以及获得下次播放序号的NextPlay

  分功能列出其他主要代码

  添加单个歌曲

if(this.openFileDialog1.ShowDialog() == DialogResult.OK)
{
 string path = this.openFileDialog1.FileName;
 FileInfo f = new FileInfo(path);
 MyPlayer.AddFile(f.FullName);
 string STRFILE = Convert.ToString(MyPlayer.NumOfMusic);
 for(int i = 1;i<=5-STRFILE.Length;i++)STRFILE+=’ ’;
 STRFILE += f.Name;
 this.listBox1.Items.Add(STRFILE);
}

  添加一个文件夹及其所有子文件夹的歌曲

  利用递归函数showfiles实现所有层歌曲都添加到歌曲列表中。

private void showfiles(string path,ListBox listBox1)
{
 DirectoryInfo dir = new DirectoryInfo(path);
 foreach(FileInfo f in dir.GetFiles("*.mp3"))
 {
  MyPlayer.AddFile(f.FullName);
 }
 foreach(DirectoryInfo f in dir.GetDirectories())
 {
  showfiles(f.FullName,listBox1);
 }

  删除和清空直接调用类Player中的AddFile和DelFile函数

  实现播放上一首

if(listBox1.SelectedIndex >= 0)
{
 listBox1.SelectedIndex --;
 if(listBox1.SelectedIndex <0)listBox1.SelectedIndex = MyPlayer.NumOfMusic - 1;
 MyPlayer.play(listBox1.SelectedIndex + 1);
}

  下一首

if(listBox1.SelectedIndex >= 0)
{
 listBox1.SelectedIndex = (listBox1.SelectedIndex + 1) % MyPlayer.NumOfMusic;
 MyPlayer.play(listBox1.SelectedIndex + 1);
}

  播放的控制

  利用Player的NextPlay方法返回的值来选择下一次播放的内容。

  同时利用PlayStateChange事件来实现由一曲到下一曲的替换,但是在响应PlayStateChange事件的时候直接改变Player的url无法让它直接播放下一曲,解决方法如下:

private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
 if(MyPlayer.playstate == WMPLib.WMPPlayState.wmppsMediaEnded)
 {
  timer1.Start();
 }
}

private void timer1_Tick(object sender, System.EventArgs e)
{
 timer1.Stop();
 int selectnum = 0;
 if(menuItem13.Checked)selectnum = MyPlayer.NextPlay(0);
 else if (menuItem15.Checked)selectnum = MyPlayer.NextPlay(1);
 else if (menuItem16.Checked)selectnum = MyPlayer.NextPlay(2);
 else if (menuItem17.Checked)selectnum = MyPlayer.NextPlay(3);
 if(selectnum != 0)
 {
  listBox1.SelectedIndex = selectnum - 1; 
  MyPlayer.play(selectnum);
 }
}

  满足一首歌曲结束的条件的时候唤醒计时器,计时器100ms内就响应函数timer1_Tick,在这个函数里实现下一首歌曲的选择播放便可以顺利进行.

  至此主要功能便完成了!立刻用来听听mp3,自己的东西感觉就是不一样哦!

网友关注
最新上市
编辑推荐
欢迎订阅天极网RSS聚合资讯:http://www.yesky.com/index.xml