zoukankan      html  css  js  c++  java
  • C# 调用 mediaplayer mp3播放器

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

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

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

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

      首先建立类player。

    之前先要加入mediaplayer的库

    具体步骤如下

    选择工具箱,并单击鼠标右键,在弹出的快捷菜单中选择“选择项”。
    (2)弹出“选择工具箱项”对话框,选择“COM组件”选项卡。
    (3)在COM组件列表中,选择名称为“Windows Media Player”,单击【确定】按钮,Windows Media 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"))
     
     foreach(DirectoryInfo f in dir.GetDirectories())
     

      删除和清空直接调用类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)
     
    }

    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,自己的东西感觉就是不一样哦!
  • 相关阅读:
    Spring boot unable to determine jdbc url from datasouce
    Unable to create initial connections of pool. spring boot mysql
    spring boot MySQL Public Key Retrieval is not allowed
    spring boot no identifier specified for entity
    Establishing SSL connection without server's identity verification is not recommended
    eclipse unable to start within 45 seconds
    Oracle 数据库,远程访问 ora-12541:TNS:无监听程序
    macOS 下安装tomcat
    在macOS 上添加 JAVA_HOME 环境变量
    Maven2: Missing artifact but jars are in place
  • 原文地址:https://www.cnblogs.com/zhihaowang/p/10128674.html
Copyright © 2011-2022 走看看