音乐播放器——C#

使用C#开发一个简易的音乐播放器。

运行效果图:
在这里插入图片描述
布局简述:
新建一个Windows窗体应用,拖一个tableLayoutPanel容器,设置为6行两列。拖入一个label,button,设置其位置。拖一个进度条,调整其密度。调整表格第五行的内容,使其能放5个按钮进去,组件布局基本完成。
功能描述:
点击“添加歌曲”按钮打开存放歌曲的文件夹,将准备好的歌曲添加到目录中。单击列表的歌曲开始播放。单击“播放”按钮播放当前选中的歌曲,没有选中的默认播放第一首。点击“暂停”按钮,当前播放歌曲暂停,再次单击播放,恢复播放。单击“停止”,结束播放。上一首,下一首见名知意。进度条会随着当前播放歌曲的进度,不断向前走,当走到结尾,切换到下一首,如果已经为最后一首,那么就切换到第一首,拖动进度条可以改变歌曲的播放进度。
更详细的说明见代码注释

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//声明IO流,对文件进行操作
using System.IO;
//声明播放器库
using WMPLib;

namespace MusicPlayerDemo
{
    public partial class Form1 : Form
    {
        //获取文件的路径
        List<string> listPath = new List<string>();
        //定义滑动条的最大最小值
        double maxTime, minTime;
        public Form1()
        {
            InitializeComponent();
        }

        //添加歌曲到列表
        private void btnAddMusic2List_Click(object sender, EventArgs e)
        {
            //实例化打开窗体实例
            OpenFileDialog of = new OpenFileDialog();
            of.Title = "请选择音乐文件";
            //对话框可以选中多个文件
            of.Multiselect = true;
            of.Filter = "(*.mp3)|*.mp3";
            //of.ShowDialog();


            //将用户选中的文件添加到音乐播放列表中
            if(of.ShowDialog() == DialogResult.OK)
            {
                //得到文件名和扩展的数组
                string[] fileNames = of.FileNames;
                foreach(string name in fileNames)
                {
                    //获取不具有扩展名的指定文件名
                    string pathName = Path.GetFileNameWithoutExtension(name);
                    listBoxMusics.Items.Add(pathName);
                    listPath.Add(name);
                }
            }

        }

        private void tableLayoutPanel1_Paint(object sender, PaintEventArgs e)
        {

        }

        private void listBoxMusics_SelectedIndexChanged(object sender, EventArgs e)
        {
            //获取当前选中文件的索引
            int selectIndex = listBoxMusics.SelectedIndex;
            //音乐播放器是根据文件的URL去播放的
            axWindowsMediaPlayer1.URL = listPath[selectIndex];
            timer1.Enabled = true;
        }

        //上一首
        private void btnLastMusic_Click(object sender, EventArgs e)
        {
            //上一首在当前选中的索引减1即可
            int selectIndex = listBoxMusics.SelectedIndex - 1;
            if(selectIndex < 0)
            {
                selectIndex = 0;
            }
            //点击上一首了,选中的行也向上移
            listBoxMusics.SelectedIndex = selectIndex;
            //音乐播放器是根据文件的URL去播放的
            axWindowsMediaPlayer1.URL = listPath[selectIndex];
            //这是选中当前文件的下标
            //labMusicName.Text = listBoxMusics.SelectedIndex.ToString();
            //SelectedItem选中文件的名称
            labMusicName.Text = listBoxMusics.SelectedItem.ToString();

        }

        //下一首
        private void btnNextMusic_Click(object sender, EventArgs e)
        {
            //下一首在当前选中的索引加1即可
            int selectIndex = listBoxMusics.SelectedIndex + 1;
            //如果索引超过了记录总数,那么索引应该减去1
            if (selectIndex >= listBoxMusics.Items.Count)
            {
                selectIndex = selectIndex - 1;
            }
            //点击下一首了,选中的行也向下移
            listBoxMusics.SelectedIndex = selectIndex;
            //音乐播放器是根据文件的URL去播放的
            axWindowsMediaPlayer1.URL = listPath[selectIndex];
            //SelectedItem选中文件的名称
            labMusicName.Text = listBoxMusics.SelectedItem.ToString();
        }

        //暂停
        private void btnSuspend_Click(object sender, EventArgs e)
        {
            axWindowsMediaPlayer1.Ctlcontrols.pause();
        }

        //停止
        private void btnStop_Click(object sender, EventArgs e)
        {
            axWindowsMediaPlayer1.Ctlcontrols.stop();
            timer1.Enabled = false;
        
        }

        //播放
        private void btnBroadcast_Click(object sender, EventArgs e)
        {
            //下一首在当前选中的索引加1即可
            int selectIndex = listBoxMusics.SelectedIndex;
            //如果索引超过了记录总数,那么索引应该减去1
            if (selectIndex < 0)
            {
                selectIndex = selectIndex < 0 ? 0 : selectIndex;
                //点击下一首了,选中的行也向下移
                listBoxMusics.SelectedIndex = selectIndex;
                //音乐播放器是根据文件的URL去播放的
                axWindowsMediaPlayer1.URL = listPath[selectIndex];
                //SelectedItem选中文件的名称
                labMusicName.Text = listBoxMusics.SelectedItem.ToString();
            }
            else
            {
                axWindowsMediaPlayer1.Ctlcontrols.play();
            }
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            //获取文件的最大长度,即最大时间
            maxTime = axWindowsMediaPlayer1.currentMedia.duration;
            //获取文件当前的播放位置
            minTime = axWindowsMediaPlayer1.Ctlcontrols.currentPosition;

            trackBarSpeed.Maximum = (int)maxTime;
            trackBarSpeed.Value = (int)minTime;

            //当进度条到最后了,自动切换到下一首
            if(axWindowsMediaPlayer1.playState == WMPPlayState.wmppsStopped)
            {
                int selectedIndex = listBoxMusics.SelectedIndex + 1;
                selectedIndex = selectedIndex == listBoxMusics.Items.Count ? 0 : selectedIndex;
                axWindowsMediaPlayer1.URL = listPath[selectedIndex];
                listBoxMusics.SelectedIndex = selectedIndex;
                labMusicName.Text = listBoxMusics.SelectedItem.ToString();
                trackBarSpeed.Value = 0;
                timer1.Enabled = true;
            }
        }

        //鼠标按下的时候拖动滚动条
        private void trackBarSpeed_MouseDown(object sender, MouseEventArgs e)
        {
            timer1.Enabled = false;
            axWindowsMediaPlayer1.Ctlcontrols.pause();  //暂停
        }

        private void trackBarSpeed_MouseUp(object sender, MouseEventArgs e)
        {
            double currPosi = trackBarSpeed.Value;
            axWindowsMediaPlayer1.Ctlcontrols.currentPosition = currPosi;
            axWindowsMediaPlayer1.Ctlcontrols.play();
            timer1.Enabled = true;
        }

    }
}

需要引用的两个包,在文件开头已经说明。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值