黑马程序员-音乐播放器

来源:互联网 发布:手机直播源码 编辑:程序博客网 时间:2024/06/10 21:29
----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

MediaPlayer为播放器核心,自己动手写一个简易版的音乐播放器

首先需要添加MediaPlayer,步骤如下:

新建一个WinForm应用程序

在工具箱中找到“菜单和工具栏”

->右键

->选择项

->COM组件

->WindowsMediaPlayer

->添加到工具箱

添加到工具箱之后我们就要先将MediaPlayer拖入窗口中,然后看一下都有些什么属性

  控制播放歌曲:<axWindowsMediaPlayer>.URL将歌曲的全路径名放到URL

   控制是否自动播放:<axWindowsMediaPlayer>.setting.autoStart

   控制播放、暂停和停止

   <axWindowsMediaPlayer>.Ctlcontrol.player();播放

   <axWindowsMediaPlayer>Ctlcontrol.pause();暂停

   <axWindowsMediaPlayer>Ctlcontrol.stop();停止

  WindowsMediaPlayer.Ctlcontrols.currentPositionString音乐播放当前时间的00:00显示形式

WindowsMediaPlayer.Ctlcontrols.currentPosition音乐播放当前时间的详细时间,单位为秒。详细的double类型

WindowsMediaPlayer.currentMedia.durationString播放的音乐的总时间00:00形式

WindowsMediaPlayer.currentMedia.duration播放的音乐的总时间,以秒的形式表现,double类型

然后就可以开始编码了

首先,我们需了解播放器的原理 


 上图就粗略的表达了播放器的核心原理,我们对照着这个原理,编写自己的代码。

我们写的过程中需要一步一步调试,所以需要关闭自动播放的功能

FormLoad事件中添加代码:

           axPlayer.settings.autoStart = false;

在界面上添加播放、静音、停止按钮对它们添加Click事件。事件中关键代码为:

       axPlayer.Ctlcontrols.play();//播放

axPlayer.Ctlcontrols.pause();//暂停

axPlayer.settings.mute = true;//静音

axPlayer.Ctlcontrols.stop();//停止

然后添加一个打开按钮

       在类内方法外定义一个集合,存储音乐文件列表

           List<string> lsongs = new List<string>();

       然后添加按钮的Click事件:

       OpenFileDialog ofd = new OpenFileDialog();生成一个OpenFileDialog对象,然后对其属性进行设置,关键的地方就是要实现集合lsongs中的数据要和listsongplayer中的数据保持一致

for (int i = 0; i <ofd.FileNames.Length; i++)

{

    lsongs.Add(ofd.FileNames[i]);

    string[] temp = ofd.FileNames[i].Split(new char[] { '\\' }, StringSplitOptions.RemoveEmptyEntries);

    listsongplayer.Items.Add(temp[temp.Length - 1]);

}

之后调用歌曲的播放方法,实现歌曲的播放

实现上一曲和下一曲功能

       这两个功能其实是一样的,只是方法中比较的数字不同罢了

       下一曲;if (listsongplayer.Items.Count>0)

            {

                MyPlay(index > (lsongs.Count- 1) ? 0 : index);

            }

       上一曲:if (listsongplayer.Items.Count>0)

            {

               MyPlay(listsongplayer.SelectedIndex - 1 < 0 ? lsongs.Count - 1 :--listsongplayer.SelectedIndex);

            }

双击列表中的歌曲名称播放

  添加ListBoxMouseDoubleClick事件

       MyPlay(listsongplayer.SelectedIndex);

删除选中项

       这个需要实现lsongs集合和listBox中的数据同步,删除的时候都要删除

               if (listsongplayer.SelectedIndex!=-1)

            {

               lsongs.RemoveAt(listsongplayer.SelectedIndex);

               listsongplayer.Items.RemoveAt(listsongplayer.SelectedIndex);

            }

       清空列表的时候也是需要两个地方都清空

                  if (listsongplayer.SelectedIndex!=-1)

            {

                lsongs.Clear();

                listsongplayer.Items.Clear();

            }

音量的控制

       axPlayer.settings.volume,通过这个属性,就可以控制音量的大小,然后实现音量+和音量-按钮的Click事件

能熟练的掌握整体音乐播放器的播放,自动播放下一曲完成上一曲和下一曲的操作等等都需要多MediaPlayer播放歌曲的过程有很深的了解



这张图上面的两张小图充分表明了MediaPlayer在播放一首歌的时候的执行过程,同时我们看到了,当我们需要自动切换的时候,也只能等到MediaEnded状态之后

总体来说,这一个题目的难点就在于对歌词的处理上

完成对歌词的处理,需要的定义连个方法,第一个方法InLrc(),这个方法导入歌词,然后又ForMatLrc()方法来完成对歌词的格式化

       private void InLrc(string pathSong)

       {

            pathSong = pathSong + ".lrc";//歌词文件就是音乐文件名+”.lrc”

            if (System.IO.File.Exists(pathSong))//当文件存在时

            {

                songLrc = System.IO.File.ReadAllLines(pathSong);//全部读取

                ForMatLrc(songLrc);//调用ForMatLrc方法

            }

            else

            {

                songLrc = null;//文件不存在歌词将为空

            }

        }

       private void ForMatLrc(string[] Lrc)

       {

            List<string> lrcAfter = new List<string>();

            for (int i = 0; i <Lrc.Length; i++)

            {

                string lrcTemp = Lrc[i];

                string[] tempTemp = lrcTemp.Split(new char[] { '['']' }, StringSplitOptions.RemoveEmptyEntries);//去掉时间两边的'['']'

                int a = tempTemp.Length;

                for (int j = 0; j < tempTemp.Length; j++)

                {

                    if (tempTemp[j].Contains(':'))

                    {

                        if(isTime(tempTemp[tempTemp.Length-1]))

                        {

                            continue;

                        }

                        else if (tempTemp[j] ==tempTemp[tempTemp.Length - 1])

                        {

                            continue;

                        }

                        else

                        {

                           lrcAfter.Add(tempTemp[j] + "|" + tempTemp[tempTemp.Length - 1]);

                        }

                    }

                }

                lrcAfter.Sort();//对集合进行排序

                songLrc = lrcAfter.ToArray();//将集合转化为字符串数组

            }

        }

到这里,自己动手写的音乐播放器就没有什么难点了,只要自己细心,认真的去编码。将会自己完成播放器的编写工作的



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