• 使用Media Player控件播放MP3


    利用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,在这个函数里实现下一首歌曲的选择播放便可以顺利进行. 
  • 相关阅读:
    二、Cocos2dx概念介绍(游戏开发中不同的坐标系,cocos2dx锚点)
    (2)入门指南——(7)添加jquery代码(Adding our jQuery code)
    Citrix 服务器虚拟化之三十一 XenApp 6.5负载均衡
    CSS——inline-block属性
    VMware Workstation(虚拟机软件) V10.0 简体中文版可以安装了
    [.NET MVC4 入门系列01]Helloworld MVC 4 第一个MVC4程序
    ElasticSearch NEST笔记
    什么是REST API?
    ArrayList与List<T>笔记
    C# Socket SSL通讯笔记
  • 原文地址:https://www.cnblogs.com/tuyile006/p/544386.html
Copyright © 2020-2023  润新知