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,自己的东西感觉就是不一样哦!
  • 相关阅读:
    idea中如何返回上一个鼠标的焦点
    git-修改本地和远端分支名字
    git修改已经commit的注释记录
    《完全用Linux工作》
    C++ 网络爬虫实现
    计算两个YUV420P像素数据的PSNR---高等算法
    C++类对象大小的计算
    mp4文件格式解析
    BMP图片格式模型(2)
    BMP图片格式模型
  • 原文地址:https://www.cnblogs.com/zhihaowang/p/10128674.html
Copyright © 2011-2022 走看看