利用mediaplayer打造自己的mp3播放器

利用mediaplayer打造自己的mp3播放器<script language="javascript" type="text/javascript"> document.title="利用mediaplayer打造自己的mp3播放器 - "+document.title </script>


           

         利用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中的AddFileDelFile函数

    

     实现播放上一首

         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);

          }

     播放的控制

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

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

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,自己的东西感觉就是不一样哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值