黑马程序员_音乐(视频)播放器学习

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

1.本节主要学习了音乐播放器的简单制作,在此篇中主要介绍用到的知识点和重要的思路代码

首先,播放器的控件使用的是windows自带的player组件


2.视频的播放、暂停直接调用组件的相应方法即可,对应的播放代码如下:

        /// <summary>
        /// 播放
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnPlay_Click(object sender, EventArgs e)
        {
            if (btnPlay.Text == "播放")
            {
                axPlayer.Ctlcontrols.play();
                btnPlay.Text = "暂停";
            }
            else if (btnPlay.Text == "暂停")
            {
                axPlayer.Ctlcontrols.pause();
                btnPlay.Text = "播放";
            }

              //btnPlay.Text = btnPlay.Text == "播放" ? "暂停":"播放";

            
        }

3.添加歌曲到播放列表的实现,MyPlay方法在调用时,如果列表为空,直接返回。

        /// <summary>
        /// 添加歌曲到播放列表
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnOpen_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofg = new OpenFileDialog();
            ofg.InitialDirectory = @"E:\黑马.net入学\6-基础班项目_自己动手写音乐播放器(高级内容)";
            ofg.Filter ="音乐文件|*.mp3;*.wma|视频文件|*.wmv";
            ofg.Title="请选择文件";
            ofg.Multiselect=true;
            if (ofg.ShowDialog() == DialogResult.OK)
            {
                for (int i = 0; i < ofg.FileNames.Length; i++)
                {
                    lSongs.Add(ofg.FileNames[i]);
                    string[] songs = ofg.FileNames[i].Split(new char[] { '\\' }, StringSplitOptions.RemoveEmptyEntries);
                    listSongsPlayer.Items.Add(songs[songs.Length-1]);                  

                }
                //axPlayer.URL = lSongs[0];         //选定歌曲第一个为默认播放
                //listSongsPlayer.SelectedIndex = 0;
                MyPlay(0);
            }

       
        }
      /// <summary>
        /// 用索引完成播放,
        /// </summary>
        /// <param name="url"></param>
       private void MyPlay(int url)
        {
            //if (btnPlay.Text == "播放")
            //{
            //    axPlayer.Ctlcontrols.play();
            //    btnPlay.Text = "暂停";
            //}
            //else if (btnPlay.Text == "暂停")
            //{
            //    axPlayer.Ctlcontrols.pause();
            //    btnPlay.Text = "播放";
            //}
            if (listSongsPlayer.Items.Count == 0)
            {
                return;
            }
            if (url < 0)
            {
                url = 0;
            }
            btnPlay.Enabled = true;
            btnMute.Enabled = true;
            btnStop.Enabled = true;


           
            axPlayer.URL = lSongs[url];
            listSongsPlayer.SelectedIndex = url;
            axPlayer.Ctlcontrols.play();
            btnPlay.Text = "暂停";
            
        }



4.添加歌词的显示

歌词显示的主要思路是要通过读取歌词文件,并将歌词通过每一项为时间+歌词的方式存储在一个歌词集合中,然后再与播放器的当前播放时间进行比较,显示对应的歌词。

5.播放器的静音等行为是在播放器组件的Setting属性里面进行赋值操作的,具体如下:

  /// <summary>
        /// 静音
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnMute_Click(object sender, EventArgs e)
        {
            if (btnMute.Text == "静音")
            {
                axPlayer.settings.mute = true;
                btnMute.Text = "取消静音";
            }
            else if (btnMute.Text == "取消静音")
            {
                axPlayer.settings.mute = false;
                btnMute.Text = "静音";
            }
        }

6.自动播放下一曲的实现

      private void axPlayer_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
       {
           if (listSongsPlayer.Items.Count == 0)
           {
               return;
           }
    //       temp1 += axPlayer.playState.ToString() + "\n";
           label1.Text += axPlayer.playState.ToString() + "\n";
           if (axPlayer.playState == WMPLib.WMPPlayState.wmppsMediaEnded)
           { 
            //选择下一曲,准备播放
               int temp = listSongsPlayer.SelectedIndex;
               temp++;
               if (temp > lSongs.Count - 1)
               {
                   listSongsPlayer.SelectedIndex = 0;
                   axPlayer.URL = lSongs[0];
               }
               else
               {
                   listSongsPlayer.SelectedIndex = temp;
                   axPlayer.PlayStateChange -= axPlayer_PlayStateChange;
                   axPlayer.URL = lSongs[temp];
                   axPlayer.PlayStateChange += axPlayer_PlayStateChange;
               }
           }
           if(axPlayer.playState == WMPLib.WMPPlayState.wmppsReady)
           {
             //播放下一曲
           //    this.MyPlay(listSongsPlayer.SelectedIndex);
               axPlayer.Ctlcontrols.play();
           }
       }

这里实现自动播放下一曲的时候,我是用的播放器控件式最新的player,所以在给axPlayer.URL赋值时会直接再一次触发axPlayer_PlayStateChange事件,所以再给axPlayer.URL赋值时,要先将axPlayer_PlayStateChange事件去掉,然后赋值完成后再添加上去。实际代码:

axPlayer.PlayStateChange -= axPlayer_PlayStateChange;
                   axPlayer.URL = lSongs[temp];
                   axPlayer.PlayStateChange += axPlayer_PlayStateChange;



---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------详细请查看: www.itheima.com
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值