基本信息
源码名称:C# 音乐播放器实例源码下载
源码大小:14.98M
文件格式:.zip
开发语言:C#
更新时间:2017-06-07
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):78630559

本次赞助数额为: 2 元 
   源码介绍



需要启用 Windows Media Player 功能,否则会提示【System.Runtime.InteropServices.COMException:“没有注册类】

操作步骤:控制面板>>程序>>启用或者关闭windows 功能>>选中 媒体功能>>Windows Media Player,点击确定即可


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Configuration;
using System.Media;


namespace 音乐播放器
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        #region 窗体加载事件 加载内容
        private void Form1_Load(object sender, EventArgs e)
        {
            #region 设置默认播放列表
            Directory.CreateDirectory(@"d:\cloud");             //建立默认文件夹
            FileInfo fi = new FileInfo(@"d:\cloud\info.list");   //声明文件对象
            if (fi.Exists && fi.Length > 0)                    //判断是否存在默认文件并且文件不为空
            {
                Read(@"d:\cloud\info.list");                    //读取默认路径的文件

            }

            

            #endregion

        }
        #endregion
        #region 调用方法
        #region 把文件添加到列表中
        public static int count = 1;
        //把选中歌曲内容加到列表中方法
        public void SetPlayList(string[] s)
        {
            string strType = "mp3|mp4|wma";
            ArrayList list = new ArrayList();
            //遍历字符串数组s
            foreach (string lis in s)
            {      //从路径lis中截取出歌曲的后缀名
                string str = lis.Substring(lis.LastIndexOf(".") 1);//取点后边的字符串
                //将后缀名类型以'|'分割成字符串数组
                string[] st = strType.Split('|');
                //将歌曲的后缀名分别与给出的类型配对
                foreach (string stt in st)
                {
                    if (str == stt)
                    {    //声明一个WMPLib.IWMPMedia的对象media,该对象可以添加到播放器的播放清单中
                        WMPLib.IWMPMedia media = this.axWindowsMediaPlayer1.newMedia(lis);
                        //添加到播放器的播放清单中
                        this.axWindowsMediaPlayer1.currentPlaylist.appendItem(media);
                        //按顺序播放清单中的文件
                        this.axWindowsMediaPlayer1.Ctlcontrols.play();
                        //初始化一个ListViewItem类型的实例
                        ListViewItem item = new ListViewItem();
                        string name = Path.GetFileName(lis);
                        string[] sna = name.Split('.');//将歌曲名以“.”分割成名字和后缀名
                        item.Text = "" count;//取序号
                        //把播放的歌曲信息添加到播放列表中
                        item.SubItems.Add(sna[0]);//取名字部分
                        item.SubItems.Add(lis);//取地址
                        listView1.Items.Add(item);//把每一个子项添加到项中
                        count ;//每添加一项后序号 1
                    }
                }
            }
        }
        #endregion


        /// <summary>
        /// 读取列表
        /// </summary>
        /// <param name="path">用户选择的读取列表路径</param>
        private void Read(string path)
        {

            StreamReader sr = new StreamReader(path);               //声明写读对象
            int i = 1;                                           //声明变量为listview列表序号赋值
            int n = path.LastIndexOf('.');                         //获取文件名最后一次出现"."的索引
            if (path.Substring(n, path.Length - n) == ".list")       //判断文件的格式是否为“.list”
            {
                this.listView1.Items.Clear();                      //清空listview列表
                this.axWindowsMediaPlayer1.currentPlaylist.clear();   //清空播放器列表
                while (true)                                      //循环写入列表中的文件
                {
                    string s = sr.ReadLine();                      //接受读取的字符串,实际上是歌曲的地址
                    if (s == null)                                 //判断是否读取完成,如果读完就跳出循环
                    {
                        break;
                    }

                    WMPLib.IWMPMedia me = this.axWindowsMediaPlayer1.newMedia(s);//声明播放文件对象
                    this.axWindowsMediaPlayer1.currentPlaylist.appendItem(me);   //把播放文件对象添加到播放器列表中
                    this.axWindowsMediaPlayer1.Ctlcontrols.play();              //播放器按顺序播放歌曲
                    List(s, i);                                              //使用listview列表方法与播放器列表同步
                    i ;                                                      //序号变量自加1
                }
                sr.Close();                                                     //关闭读文件流
            }
            else
            {
                sr.Close();
                MessageBox.Show("请选择正确的文件格式:“.list格式”");
            }
        }

        /// <summary>
        /// 保存列表
        /// </summary>
        /// <param name="path">用户选择的保存列表路径</param>
        private void Write(string path)
        {
            StreamWriter sw = new StreamWriter(path);           //指定文件的写入路径
            foreach (ListViewItem l in listView1.Items)         //循环比例listview列表
            {
                sw.WriteLine(l.SubItems[2].Text);             //获得列表中的每个歌曲的地址并写入文件
            }
            sw.Close();                                     //关闭文件写入

        }

        /// <summary>
        /// 判断播放文件颜色变红
        /// </summary>
        private void songColor()
        {
            string playSong = this.axWindowsMediaPlayer1.currentMedia.sourceURL;  //获取播放文件的地址
            foreach (ListViewItem l in listView1.Items)                         //遍历listview中的文件地址
            {
                if (l.SubItems[2].Text == playSong)                            //如果文件地址和播放文件地址相同就改变颜色
                {
                    listView1.Items[l.Index].ForeColor = Color.Red;
                }
                else
                {
                    listView1.Items[l.Index].ForeColor = Color.Blue;            //如果不同就为默认色
                }
            }
        }

        /// <summary>
        /// 播放器列表同步至Listview列表
        /// </summary>
        /// <param name="path">文件路径数组</param>
        private void List(string path, int i)
        {

            ListViewItem liv = new ListViewItem(i.ToString());  //声明ListViewItem对象并为其复制
            this.listView1.Items.Add(liv);                     //为序号赋值
            int n = path.LastIndexOf(@"\");                    //截取文件名字的索引位置
            liv.SubItems.Add(path.Substring(n 1));             //添加文件名字到列表
            liv.SubItems.Add(path);                             //添加文件地址到列表

        }

        /// <summary>
        /// 添加文件并同步播放
        /// </summary>
        /// <param name="path">打开文件的路径</param>
        private void OpenFiles(string[] path)
        {
            axWindowsMediaPlayer1.currentPlaylist.clear(); //清空播放器内部的播放列表
            listView1.Items.Clear();                     //清空ListView列表
            int i = 1;                                  //设定变量来改变ListView的序号
            foreach (string s in path)                   //遍历打开文件的地址数组
            {
                WMPLib.IWMPMedia me = this.axWindowsMediaPlayer1.newMedia(s); //声明一个播放器列表对象
                this.axWindowsMediaPlayer1.currentPlaylist.appendItem(me);    //把地址添加进播放器列表
                this.axWindowsMediaPlayer1.Ctlcontrols.play();               //播放器按列表顺序播放文件
                List(s, i);                                               //把播放文件同步到ListView列表
                i ;                                                      //序号加一
            }

        }
        #endregion
        #region 打开文件
        private void toolStripMenuItem1_Click(object sender, EventArgs e)//打开文件
        {
            openFileDialog1.InitialDirectory = @"d:\cloud"; //设定文件打开默认路径
            DialogResult file = openFileDialog1.ShowDialog(); //声明选择文件对话框选择结果的对象            
            if (file == System.Windows.Forms.DialogResult.OK) //如果点击OK则进行下一步,反之无操作
            {
                string[] strPath = openFileDialog1.FileNames; // 声明数组变量接受选择文件的路径可以是多个文件
                OpenFiles(strPath);                         //把选择的文件路径带入OpenFiles方法
            }

        }
        #endregion
        

        private void toolStripMenuItem2_Click(object sender, EventArgs e)//添加文件
        {
            //打开对话框并获得结果
            OpenFileDialog op = new OpenFileDialog();
            //设置可多选
            op.Multiselect = true;
            DialogResult dr = op.ShowDialog();
            //判断是否为“打开”
            if (dr == DialogResult.OK)
            {
                //清空播放器中播放列表

                string[] files = op.FileNames;
                SetPlayList(files);//将文件加到列表中
            }

        }

        private void toolStripMenuItem3_Click(object sender, EventArgs e)//打开文件夹
        {
            DialogResult dic = folderBrowserDialog1.ShowDialog();  //声明选择文件夹对话框选择结果对象      
            if (dic == System.Windows.Forms.DialogResult.OK)       //如果点击OK进行下一步,反之无操作
            {
                string[] dicFiles = Directory.GetFiles(folderBrowserDialog1.SelectedPath);//声明数组变量接受选择文件夹中的文件的路径                                                         
                OpenFiles(dicFiles);                            //获得的文件路径变量带入OpenFile方法
            }

        }

        private void toolStripMenuItem4_Click(object sender, EventArgs e)//打开列表
        {
            DialogResult file = openFileDialog1.ShowDialog();                //声明文件对话框选择结果对象
            if (file == System.Windows.Forms.DialogResult.OK)                //判断选择结果是否为OK
            {
                string path = openFileDialog1.FileName;                     //接收文件名
                Read(path);
            }
        }

        private void toolStripMenuItem5_Click(object sender, EventArgs e)//保存列表
        {
            SaveFileDialog save = new SaveFileDialog();    //声明保存文件对话框选择对象
            save.Filter = "列表格式|.list";               //设定保存文件的格式
            save.InitialDirectory = @"d:\cloud";          //设定保存文件的默认路径
            if (save.ShowDialog() == DialogResult.OK)     //判断对话框选择结果是否是OK
            {

                Write(save.FileName);                   //把文件路径带入到方法中

            }
        }

        private void toolStripMenuItem6_Click(object sender, EventArgs e)//清空列表
        {
            this.listView1.Items.Clear();                                        //清空listview列表
            this.axWindowsMediaPlayer1.currentPlaylist.clear();                    //清空播放器列表

        }

        private void toolStripMenuItem7_Click(object sender, EventArgs e)//播放
        {
            this.axWindowsMediaPlayer1.Ctlcontrols.play();                 //播放文件
            songColor();                                                //判断播放文件并改变颜色
        }

        private void toolStripMenuItem8_Click(object sender, EventArgs e)//暂停
        {
            this.axWindowsMediaPlayer1.Ctlcontrols.pause();            //播放器暂停
        }

        private void toolStripMenuItem9_Click(object sender, EventArgs e)//静音
        {
            this.axWindowsMediaPlayer1.settings.volume = 0;
        }

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

        private void toolStripMenuItem11_Click(object sender, EventArgs e)//上一首
        {
            this.axWindowsMediaPlayer1.Ctlcontrols.previous();
            songColor();
        }

        private void toolStripMenuItem12_Click(object sender, EventArgs e)//下一首
        {
            this.axWindowsMediaPlayer1.Ctlcontrols.next();
            songColor();

        }

        private void toolStripMenuItem13_Click(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count > 0)
            {
                ListViewItem liv = listView1.SelectedItems[0];                          //声明ListView对象接受
                int index = liv.Index;                                                //接受选择文件的索引
                string path = axWindowsMediaPlayer1.currentMedia.sourceURL;              //接受正在播放文件的路径
                liv.Remove();                                                        //移除ListView中选中的文件
                WMPLib.IWMPMedia me = axWindowsMediaPlayer1.currentPlaylist.get_Item(index);//根据索引获得播放器列表中对应的对象
                axWindowsMediaPlayer1.currentPlaylist.removeItem(me);                     //删除播放列表中的对象
                if (liv.SubItems[2].Text == path)                                       //判断删除的文件是否正在播放的文件
                {
                    axWindowsMediaPlayer1.Ctlcontrols.play();                             //重新按播放器列表播放文件
                    //改变播放文件的颜色
                }
                int i = 1;                                                             //变量为ListView序号赋值
                foreach (ListViewItem l in listView1.Items)                               //遍历listview
                {
                    l.Text = i.ToString();                                              //为listview序号改值
                    i ;
                }


            }

        }

        private void toolStripMenuItem6_Click_1(object sender, EventArgs e)
        {
            this.listView1.Items.Clear();                                        //清空listview列表
            this.axWindowsMediaPlayer1.currentPlaylist.clear();                    //清空播放器列表
        }

        private void 帮助ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Help2 he2 = new Help2();                                   //建立一个Form框并声明一个对象
            he2.Show();                                               //弹出form框
            
        }

        private void toolStripMenuItem14_Click(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count > 0)                            //判断选择项不为空
            {
                int index = listView1.SelectedItems[0].Index;               //获取选择项的索引
                //获取播放器里面对应索引的文件并播放
                this.axWindowsMediaPlayer1.Ctlcontrols.playItem(this.axWindowsMediaPlayer1.currentPlaylist.get_Item(index));
                //改变播放歌曲的颜色
            }
            else
            {
                MessageBox.Show("请选中要操作的文件");
            }
        }

        private void toolStripMenuItem16_Click(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count > 0)                              //判断是否有选择项
            {
                string file = this.listView1.SelectedItems[0].SubItems[2].Text;   //提取选择项的路径
                Help he = new Help(file);                                      //另外建立一个Form 并声明对象 对构造函数传路径

                he.ShowDialog();                                              //显示对象所属的Form框(除了对话框不能做任何操作)

            }
            else
            {
                MessageBox.Show("请选中要查看的文件");                            //如果没有选中文件弹出对话框提示选择文件
            }
        }

        private void listView1_DoubleClick(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count > 0)     //判断是否有选择项
            {
                ListViewItem liv = listView1.SelectedItems[0];  //因为只能选一个,所以就是数组中的第一个元素
                int index = liv.Index;                        //接收元素在列表中的索引
                //因播放器列表和ListView列表是一一对应的所以获取索引对应的播放器对象并播放
                this.axWindowsMediaPlayer1.Ctlcontrols.playItem(this.axWindowsMediaPlayer1.currentPlaylist.get_Item(index));

            }


        }

        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            toolStripMenuItem2_Click(null, null);      //效果与菜单栏中打开文件事件一样,直接带入方法
        }

        private void toolStripButton2_Click(object sender, EventArgs e)
        {
            toolStripMenuItem3_Click(null, null);      //效果与菜单栏中打开文件加事件一样,直接带入方法

        }
       

    }
}