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

     上一个版本的mp3 player时间仓促,代码中存在不少错误,功能也不完善。这一个多月一直用自己做的seaPlayer (给它暂时取个名字) 听歌, 改了不少漏洞,还完善了一些功能。这些功能有:

1.        最小化时隐藏界面,只在显示在状态栏里显示图标。

2.        退出程序时能将播放列表中的歌曲保存起来,以便下次启动播放器时能装载列表。

3.        增加了文件拖放功能,把想听的歌曲直接拖到窗口就可以添加进列表。

4.        增加了键盘del键对删除歌曲的控制,可以方便删除不想听的歌曲。

下面是部分关键代码:

seaPlayer.cs:

 

 

 

 

namespace seaPlayer

{

     public class seaPlayer : System.Windows.Forms.Form

     {

         ……

         static void Main()

         {

              Application.Run(new seaPlayer());

         }

 

 

 

 

         /* 将指定文件夹包括其子文件夹内所有mp3文件添加到播放列表 */

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

              }

         }

 

 

 

 

         /* 将播放列表的内容装载到listbox */

         private void Load()

         {

              listBox1.Items.Clear();

              for(int i = 1;i <= MyPlayer.NumOfMusic; i++)

              {

                   string STRFILE = Convert.ToString(i);

                   for(int j = 1;j<=5-STRFILE.Length;j++)STRFILE+=' ';

                   FileInfo f = new FileInfo(MyPlayer.PlayList(i));

                   STRFILE += f.Name;

                   this.listBox1.Items.Add(STRFILE);

              }

         }

 

 

 

 

         /* 双击状态栏图表,窗口变为非隐藏 */

         private void notifyIcon1_DoubleClick(object sender, System.EventArgs e)

         {

              this.Visible = true;

              this.WindowState = System.Windows.Forms.FormWindowState.Normal;

              this.notifyIcon1.Visible = false;

         }

 

 

 

 

         /* 窗口最小化时,只在状态栏显示 */

         private void Form1_Resize(object sender, System.EventArgs e)

         {

              if(this.WindowState == System.Windows.Forms.FormWindowState.Minimized)

              {

                   this.notifyIcon1.Visible = true;

                   this.Visible = false;

              }

         }

 

 

 

 

         /* 添加单个文件到列表 */

         private void menuItem2_Click(object sender, System.EventArgs e)

         {

              if(this.openFileDialog1.ShowDialog() == DialogResult.OK)

              {

                   string path = this.openFileDialog1.FileName;

                   FileInfo f = new FileInfo(path);

                   MyPlayer.AddFile(f.FullName);

                   Load();

              }

         }

 

 

 

 

         /* 将文件夹包括子文件夹内容添加到列表 */

         private void menuItem3_Click(object sender, System.EventArgs e)

         {

              if(this.folderBrowserDialog1.ShowDialog() == DialogResult.OK)

              {

                   string path = this.folderBrowserDialog1.SelectedPath;

                   showfiles(path,listBox1);

                   Load();

              }

         }

 

 

 

 

         /* 双击歌曲播放 */

         private void listBox1_DoubleClick(object sender, System.EventArgs e)

         {

              if(listBox1.SelectedIndex >= 0)

                   MyPlayer.play(listBox1.SelectedIndex + 1);

         }

 

 

 

 

         /* 删除指定歌曲 */

         private void menuItem4_Click(object sender, System.EventArgs e)

         {

              if(listBox1.SelectedIndex >= 0)

              {

                   MyPlayer.DelFile(listBox1.SelectedIndex + 1);

                   listBox1.Items.Clear();

                   Load();

              }

         }

 

 

 

 

         /* 删除所有歌曲 */

         private void menuItem7_Click(object sender, System.EventArgs e)

         {

              listBox1.Items.Clear();

              MyPlayer.NumOfMusic = 0;

         }

 

 

 

 

         /* 退出程序 */

         private void menuItem9_Click(object sender, System.EventArgs e)

         {

              MyPlayer.save();

              Application.Exit();

         }

 

 

 

 

         /* 播放上一首歌曲 */

         private void menuItem10_Click(object sender, System.EventArgs e)

         {

              if(MyPlayer.CurrentPlay > 0)

              {

                   int play = MyPlayer.CurrentPlay - 1;

                   if(play == 0)play = MyPlayer.NumOfMusic;

                   MyPlayer.play(play);

                   listBox1.SelectedIndex = play - 1;

              }

         }

 

 

 

 

         /* 播放下一首歌曲 */

         private void menuItem11_Click(object sender, System.EventArgs e)

         {

              if(MyPlayer.CurrentPlay > 0)

              {

                   int play = MyPlayer.CurrentPlay + 1;

                   if(play > MyPlayer.NumOfMusic)play = 1;

                   MyPlayer.play(play);

                   listBox1.SelectedIndex = play - 1;

              }

         }

 

 

 

 

         /* 监视播放器播放的状态,如果一首歌播放结束则转到相应处理 */

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

              }

         }

 

 

 

 

         /* del键删除指定歌曲 */

         private void listBox1_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)

         {

              if(e.KeyCode == Keys.Delete)

              {

                   if(listBox1.SelectedIndex >= 0)

                   {

                       int temp = listBox1.SelectedIndex;

                       MyPlayer.DelFile(listBox1.SelectedIndex + 1);

                       Load();

                       if(temp > MyPlayer.NumOfMusic - 1)temp = -1;

                       listBox1.SelectedIndex = temp;

 

 

 

 

                   }

              }

         }

 

 

 

 

         /* 利用DragEnterDragDrop两个事件来实现文件拖放 */

         private void Form1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)

         {

              if (e.Data.GetDataPresent(DataFormats.FileDrop))

                   e.Effect=DragDropEffects.Copy;

              else

                  e.Effect=DragDropEffects.None;

         }

 

 

 

 

         private void Form1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)

         {

              if(e.Data.GetDataPresent(DataFormats.FileDrop))

              {

                   string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);

                   foreach (string file in files)

                   {

                       MyPlayer.AddFile(file);

                   }

                   Load();

              }

         }

 

 

 

 

     }

}

 

 

 

 

Player.cs:

namespace seaPlayer

{

     /// <summary>

     /// Player 的摘要说明。

     /// </summary>

     public class Player

     {

         private AxWMPLib.AxWindowsMediaPlayer myPlayer;

          private string[] playList;

         private int numOfMusic;

         private int currentPlay;

         private string savepath;

         public int CurrentPlay

         {

              get

              {

                   return currentPlay;

              }

         }

         public int NumOfMusic

         {

              get

              {

                   return numOfMusic;

              }

              set

              {

                   numOfMusic = value;

              }

         }

         public WMPLib.WMPPlayState playstate

         {

              get

              {

                   return myPlayer.playState;

              }

         }

         public void save()

         {

              StreamWriter sw = new StreamWriter(savepath);

              for(int i = 1; i <= numOfMusic; i ++)

              {

                  sw.WriteLine(playList[i]);

              }

              sw.Close();

         }

         public void load()

         {

              try

              {

                   StreamReader sr = new StreamReader(savepath);

                   String line;

                   numOfMusic = 0;

                   while ((line = sr.ReadLine()) != null)

                   {

                       numOfMusic ++;

                       playList[numOfMusic] = line;    

                   }

                   sr.Close();

              }

              catch

              {

              }

         }

         public string PlayList(int num)

         {

              return playList[num];

         }

         public Player(AxWMPLib.AxWindowsMediaPlayer mediaPlayer)

         {

              FileInfo t = new FileInfo("save.msg");

              savepath = t.FullName;

              myPlayer = mediaPlayer;

              playList = new string[1001];

              numOfMusic = 0;

              currentPlay = 0;

              load();

         }

         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;

              }   

         }       

     }

}

 

 

 

 

总算大功告成了,感觉和一般播放器比也差不多拉:) 反正现在我听mp3只用seaPlayer了,毕竟嘛,小巧又方便哦。还是免费的哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值