您的位置:首页 > 编程语言 > C#

用C#做简易音乐播放器教程,未联网版本

2018-02-27 14:03 267 查看
一、程序界面设计1、左上角,添加两个label控件,lable1、2的text属性分别为“当前播放:”、“未播放”。2、右上角添加一个buttom控件 ,text属性为“添加歌曲”。主要用于往下面歌曲列表添加本地歌曲。3、groupBox(歌曲列表)内添加listBox控件,用于展示歌曲列表。4、groupBox(播放进度)内添加trackBar控件,用于展示歌曲播放进度5、groupBox(播放控制)内添加五个bottom控件,用来控制歌曲的播放,text属性如上图。6、添加一个timer控件,后期用于检测歌曲播放进度以及控制滑块来控制歌曲播放进度。7、添加windows自带的windowsMediaPlayer控件,可以用于播放音乐。方法:右键工具箱面板空白处,点击选择项。选择com,勾选windowsMediaPlayer添加到工具箱,再拖放到设计器中。注:我再设计器中是将windowsMediaPlayer的尺寸改成(0,0)  ,所以并不会被看见。二、代码编写1、添加歌曲双击添加歌曲按钮,为其注册点击事件 private void button1_Click(object sender, EventArgs e){//添加歌曲按钮OpenFileDialog open = new OpenFileDialog(); //实例化一个通用对话框open.Filter = "音频文件(*.mp3)|*.mp3"; //写一个文件过滤器if (open.ShowDialog() == DialogResult.OK){axWindowsMediaPlayer1.URL = open.FileName; //添加到播放器musicList.Items.Add(open.FileName); //将音频文件添加到列表框内musicList.SelectedIndex = musicList.Items.Count - 1; //选择添加的歌曲文件}本部做完之后,按添加按钮添加mp3格式文件的歌曲可以发现歌曲名称和路径已经展示在listbox中。2、播放进度做播放进度的时候首先要声明一个方法来检测媒体播放进度。首先声明几个变量。max标识歌曲的最大长度,min表示歌曲当前播放位置,bal表示歌曲播放百分比。完成后,选择timer1控件,按F4访问属性面板,属性中Interval改为1000,表示以秒为单位。点击事件,为tick注册事件,代码如下: private void timer1_Tick(object sender, EventArgs e){// 检测媒体的播放进度max = axWindowsMediaPlayer1.currentMedia.duration;//获取文件长度min = axWindowsMediaPlayer1.Ctlcontrols.currentPosition;//获取文件的当前播放位置bal = min / max;//计算百分比trackBar1.Value = (int)(bal * 100); //添加到滑块中去}
当然我们希望在把歌曲添加的时候,就已经把歌曲的长度检测出来,这时,我们回过头去修改一下"添加歌曲"代码。
  private void button1_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;trackBar1.Value = 0;axWindowsMediaPlayer1.URL = open.FileName;      //添加到播放器musicList.Items.Add(open.FileName);     //将音频文件添加到列表框内musicList.SelectedIndex = musicList.Items.Count - 1;    //选择添加的歌曲文件timer1.Enabled = true;  //开始检测进度}}
这个时候,播放歌曲就已经可以看到滑块随着歌曲的播放进度变化而变化了。下面就要考虑如何拖动滑块就可以直接控制音乐的播放进度。首先为trackBar1注册MouseDown事件,用于按住滑块时停止滑块自我变化,暂停播放音乐文件。 private void trackBar1_MouseDown(object sender, MouseEventArgs e){timer1.Enabled = false; //停止检测播放进度axWindowsMediaPlayer1.Ctlcontrols.pause(); //暂停播放文件}然后再给trackBar1注册MouseUp事件,当鼠标松开后,按照新的位置开始播放。 private void trackBar1_MouseUp(object sender, MouseEventArgs e){//当滑块鼠标放下执行操作double newValue = trackBar1.Value * 0.1 * 0.1 * max;//还原播放进度axWindowsMediaPlayer1.Ctlcontrols.currentPosition = newValue;//重置播放进度axWindowsMediaPlayer1.Ctlcontrols.play();//按进度播放}3、播放控制控制播放的五个按钮分别注册事件,代码如下: private void btEnd_Click(object sender, EventArgs e){//停止键axWindowsMediaPlayer1.Ctlcontrols.stop();}
        private void btStart_Click(object sender, EventArgs e){//播放键axWindowsMediaPlayer1.Ctlcontrols.play();}
        private void btStop_Click(object sender, EventArgs e){//暂停键axWindowsMediaPlayer1.Ctlcontrols.pause();}
按钮控制不够直接,我想在歌曲菜单中直接双击歌名来播放,如何实现?选中listBox1为doubleClick注册事件,代码如下。 private void musicList_DoubleClick(object sender, EventArgs e){//歌曲列表,双击歌名执行代码if (musicList.SelectedIndex == -1){axWindowsMediaPlayer1.URL = musicList.SelectedItem.ToString();}}这个时候整个播放器已经可以基本运行了。但是,在第二次打开的时候,第一次已经添加的歌曲并没有显示在listBox上,代码如下,仅供参考: //*****************************************将listBox的内容存入到本地,下次打开后自动读取**************************************************************************//以下代码执行时不报错,但是有时候会卡死。private void Form1_FormClosed(object sender, FormClosedEventArgs e){//关闭窗口时的事件////保存播放列表的歌曲//string save = "";//for (int i = 0; i < musicList.Items.Count; i++)//{// save += musicList.Items.ToString() + "\t\n";//}////实例化一个文件流//System.IO.FileStream fs = new System.IO.FileStream("C:\\Users\\Administrator\\Desktop\\temp.txt", System.IO.FileMode.Create, System.IO.FileAccess.Write);//System.IO.StreamWriter sw = new System.IO.StreamWriter(fs, Encoding.Default);//sw.Write(save); //写到文件//sw.Close(); //关闭文件流//fs.Close();}private void Form1_Load(object sender, EventArgs e){////载入窗体时执行//th1 = new Thread(new ThreadStart(r));//th1.IsBackground = true;//th1.Start();//开启线程}//private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)//{//} //private delegate void readValue();//实例化一个委托对象//private void r()//{// readValue rv = new readValue(read);// this.Invoke(rv); //调用委托对象//}//private void read()//{// //实例化// System.IO.FileStream fs=new System.IO.FileStream ("C:\\Users\\Administrator\\Desktop\\temp.txt",System.IO.FileMode.Open ,System.IO.FileAccess.Read );// System.IO.StreamReader sr = new System.IO.StreamReader(fs, Encoding.Default);// while (sr.EndOfStream )// {// musicList.Items.Add(sr.ReadLine());//添加到列表框中// }// sr.Close();// fs.Close();// th1.Abort(); //关闭线程//}}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息