C#制作简单的本地音乐播放器(一)—— 基本功能

此篇受大佬启发,第一部分与原帖相近:查看原帖,仅有些未提到的略微补充,毕竟学识短浅。

页面设计部分

在这里插入图片描述
与原贴相同,仅播放条下添加一个label以显示当前播放时长和歌曲总时长。添加windows自带的windowsMediaPlayer控件的方法为:右键工具箱——点击选择项——点击COM组件——找到并勾选windowsMediaPlayer——确定后拖放到窗体上。
注:windowsMediaPlayer控件自带控制界面,可以直接使用

代码实现部分

1.添加歌曲

首先声明几个变量。max表示歌曲时间的总长度,min表示歌曲当前播放位置,bal表示歌曲播放时长的百分比。

        double max, min, bal;                  //为播放进度条提前声明变量

添加歌曲按钮的代码为:

        private void button_Addmusic_Click(object sender, EventArgs e)
        {
            OpenFileDialog open = new OpenFileDialog();       //实例化一个通用对话框
            open.Filter = "音频文件(*.mp3)|*.mp3";            //选择文件格式
            if (open.ShowDialog() == DialogResult.OK)
            {
                //还原最大值最小值及进度条位置
                max = 0.0;
                min = 0.0;
                bal = 0.0;
                trackBar_progress.Value = 0;
                myMediaPlayer.URL = open.FileName;            //添加到播放器组件
                listBox_music.Items.Add(open.FileName);       //将音频文件路径添加到列表框内
                listBox_music.SelectedIndex = listBox_music.Items.Count - 1;    //列表框选中项为添加的歌曲路径
                timer_progress.Enabled = true;                //开始检测进度
            }
        }
2.播放进度

windowsMediaPlayer控件自带进度条,但这里我们利用trackBar控件来自制一个,因为进度条根据时间发生改变,所以添加一个timer控件,命名为timer_progress,其中Interval属性改为1000,即每秒触发一次事件。其中tick注册事件,代码如下:

        private void timer_progress_Tick(object sender, EventArgs e)
        {
            try
            {
                max = myMediaPlayer.currentMedia.duration;      //获取文件的时间长度
                min = myMediaPlayer.Ctlcontrols.currentPosition;//获取文件的当前播放位置
                bal = min / max;                                //计算百分比
                trackBar_progress.Value = (int)(bal * 100);     //设置滑块位置
                //将时长转化为XX:XX并显示在相应label上
                int intmax = (int)max;
                int intmin = (int)min;
                int intminM = intmin / 60;
                int intminS = intmin % 60;
                int intmaxM = intmax / 60;                      
                int intmaxS = intmax % 60;
                label_time.Text = intminM.ToString() + ":" + intminS.ToString() + "/" + intmaxM.ToString() + ":" + intmaxS.ToString();
                //截取路径的文件名部分显示在“当前歌曲”的label上
                string nowsong = listBox_music.SelectedItem.ToString();
                label_nowsong.Text = nowsong.Substring(nowsong.LastIndexOf("\\") + 1);
            }
            catch (Exception)
            {
                //切换歌曲瞬间可能导致max,min无值,添加try跳转报错但并不对报错进行处理
            }
        }
3.拖拽播放

要实现拖拽播放即应有“按下暂停”,“松开继续”两个事件。当按下进度条时,播放暂停。滑动至指定位置后,松开进度条按钮,播放从当前松开位置继续。
其中“按下暂停”即trackBar的MouseDown事件,代码如下:

        private void trackBar_progress_MouseDown(object sender, MouseEventArgs e)
        {
            timer_progress.Enabled = false;     //停止检测播放进度
            myMediaPlayer.Ctlcontrols.pause();  //暂停当前播放文件
        }

其中“松开继续”即trackBar的MouseUp事件,代码如下:

        private void trackBar_progress_MouseUp(object sender, MouseEventArgs e)
        {
            double newValue = trackBar_progress.Value * 0.1 * 0.1 * max;
            myMediaPlayer.Ctlcontrols.currentPosition = newValue;          //为播放控件赋予新进度
            myMediaPlayer.Ctlcontrols.play();                              //从当前进度开始播放
            timer_progress.Enabled = true;                                 //开始检测播放进度
        }
4.开始播放

点击“开始按钮”即进行播放,代码如下:

        private void button_Start_Click(object sender, EventArgs e)
        {
            myMediaPlayer.Ctlcontrols.play();         //开始播放
        }

当然也可以通过双击歌曲列表的指定路径播放歌曲,代码如下:

        private void listBox_music_DoubleClick(object sender, EventArgs e)
        {
            //若点击的歌曲列表有效,为播放控件赋予新路径
            if (listBox_music.SelectedIndex != -1)
            {
                myMediaPlayer.URL = listBox_music.SelectedItem.ToString();
            }
        }
5.暂停播放

点击“暂停按钮”即对播放进行暂停,代码如下:

        private void button_Stop_Click(object sender, EventArgs e)
        {
            myMediaPlayer.Ctlcontrols.pause();        //暂停播放
        }
6.停止播放

点击“停止按钮”即停止当前播放,代码如下:

        private void button_End_Click(object sender, EventArgs e)
        {
            myMediaPlayer.Ctlcontrols.stop();         //停止播放
        }

当然了,直接关闭程序也能停止播放。

后记部分

选择歌曲,显示进度,开始、暂停、停止播放,此时的简易音乐播放器已经基本可以运行了。关于后续的歌词显示,可以看一下第二部分C#同步显示歌词,至于原帖中提到的下次打开时加载歌曲列表,下次一定,毕竟学识短浅,还望海涵。

发布了10 篇原创文章 · 获赞 18 · 访问量 2441

猜你喜欢

转载自blog.csdn.net/weixin_44122062/article/details/104155655