时间:2022-06-04 12:19:51 | 栏目:.NET代码 | 点击:次
本文实例为大家分享了C#基于winform实现音乐播放器的具体代码,供大家参考,具体内容如下
首先,右键工具箱的组件,找到选择项,找到Windows Media Player组件并添加。
设计界面:
首先实现基本的功能
给“”老板播放器“的播放暂停添加代码
MusicPlayer.Ctlcontrols.play(); //播放
MusicPlayer.Ctlcontrols.pause();//暂停
MusicPlayer.Ctlcontrols.stop();//停止
首先给Windows Media Player控件改名为MusicPlayer,并在程序加载时关闭自动播放和赋予一个默认的地址。
private void Form1_Load(object sender, EventArgs e) { //在程序加载的时候,取消播放器的自动播放功能 MusicPlayer.settings.autoStart = false; MusicPlayer.URL = @"E:\CloudMusic\陈亮 - 无题.mp3"; label1.Image = Image.FromFile(@"C:\Users\14505\Desktop\继续.jpg"); }
接下来是播放键的按钮
List<string> list = new List<string>();//用于储存音乐的全路径 private void btnPlayorPause_Click(object sender, EventArgs e) { if (btnPlayorPause.Text == "播放") { if (b) { //获得选中的歌曲 让音乐从头播放 MusicPlayer.URL = list[listBox1.SelectedIndex]; } MusicPlayer.Ctlcontrols.play(); btnPlayorPause.Text = "暂停"; } else if (btnPlayorPause.Text == "暂停") { MusicPlayer.Ctlcontrols.pause(); btnPlayorPause.Text = "播放"; b = false; } }
用list集合来存储文件的路径,并且listbox控件的items也对应这list,这样我们可以通过点击listbox选中内容(获取它的索引)来找到对应索引的list集合中的路径并播放。
给listbox添加双击事件:
/// <summary> /// 双击播放对应的音乐 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void listBox1_DoubleClick(object sender, EventArgs e) { if (listBox1.Items.Count == 0) { MessageBox.Show("请首先原则音乐"); return; } try { MusicPlayer.URL = list[listBox1.SelectedIndex]; MusicPlayer.Ctlcontrols.play(); btnPlayorPause.Text = "暂停"; lblinformation.Text = MusicPlayer.Ctlcontrols.currentPosition.ToString(); } catch { } }
接下来是打开按钮,我们需要打开对话框选取想要的音乐文件
/// <summary> /// 打开按钮 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button4_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Title = "请选择您的文件"; ofd.Filter = "音乐文件|*.mp3|全部文件|*.*"; ofd.InitialDirectory = @"E:\CloudMusic"; ofd.Multiselect = true; ofd.ShowDialog(); //获得在文本框中选择的全路径 string[] path = ofd.FileNames; for (int i = 0; i < path.Length; i++) { list.Add(path[i]); //将音乐文件的文件名存储到listbox中 listBox1.Items.Add(Path.GetFileName(path[i])); } }
下面是上一首下一首的功能,我们只需要获取listbox控件中当前选中项的索引,在使用lst即可
/// <summary> /// 下一曲 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button5_Click(object sender, EventArgs e) { //获得当前选中的索引 int a = listBox1.SelectedIndex + 1; //清空所有选中的索引 这里是因为我们开启了多选属性,才需要清理 listBox1.SelectedIndices.Clear(); if (a == listBox1.Items.Count) { a = 0; } //将改变后的索引重新赋值给当前选中项的索引 listBox1.SelectedIndex = a; MusicPlayer.URL = list[a]; MusicPlayer.Ctlcontrols.play(); } /// <summary> /// 上一曲 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button6_Click(object sender, EventArgs e) { int a = listBox1.SelectedIndex - 1; listBox1.SelectedIndices.Clear(); if (a < 0) { a = listBox1.Items.Count - 1; } //将改变后的索引重新赋值给当前选中项的索引 listBox1.SelectedIndex = a; MusicPlayer.URL = list[a]; MusicPlayer.Ctlcontrols.play(); }
给listbox控件添加一个右键菜单,我们需要多选删除功能。
这里必须先清除集合中的内容,再清除listbox控件中的内容,否则会引起程序的异常。
/// <summary> /// 点击删除选中项 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void 删除ToolStripMenuItem_Click(object sender, EventArgs e) { //要删除列表中的选中项 //先删集合 //首先获得要删除的歌曲的数量 int count = listBox1.SelectedItems.Count; for (int i = 0; i < count; i++) { //先删集合 list.RemoveAt(listBox1.SelectedIndex); //在删列表 listBox1.Items.RemoveAt(listBox1.SelectedIndex); } }
接下来是静音和外放按钮,这里我使用label控件添加了图片(百度自行找播放和暂停的图片即可)
/// <summary> /// 点击放音或静音 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void label1_Click(object sender, EventArgs e) { if (label1.Tag.ToString() == "1") { //目的:让你静音 MusicPlayer.settings.mute = true;//静音 //显示静音的图片 label1.Image = Image.FromFile(@"C:\Users\14505\Desktop\暂停.jpg"); label1.Tag = "2"; } else { MusicPlayer.settings.mute = false; //显示放音图片 label1.Image = Image.FromFile(@"C:\Users\14505\Desktop\继续.jpg"); label1.Tag = 1; } }
接下来要加一个播放完自动下一首的功能
我这里使用了歌曲全部时常和当前播放时长去比较,当前播放时常+1等于全部时长时,我们就切换下一首
或者使用bool判断控件的播放状态也是一样的道理
private void timer1_Tick(object sender, EventArgs e) { //如果播放器的状态时正在播放中 if (MusicPlayer.playState == WMPLib.WMPPlayState.wmppsPlaying) { lblinformation.Text = MusicPlayer.currentMedia.duration.ToString() + "\r\n" + MusicPlayer.currentMedia.durationString + "\r\n" + MusicPlayer.Ctlcontrols.currentPositionString; double b1 = double.Parse(MusicPlayer.currentMedia.duration.ToString()); double b2 = double.Parse(MusicPlayer.Ctlcontrols.currentPosition.ToString())+1; //如果歌曲当前的播放时间等于歌曲的总时间,自动播放下一曲 //比较时间的值 if (b1<=b2) { //获得当前选中的索引 int a = listBox1.SelectedIndex + 1; //清空所有选中的索引 listBox1.SelectedIndices.Clear(); if (a == listBox1.Items.Count) { a = 0; } //将改变后的索引重新赋值给当前选中项的索引 listBox1.SelectedIndex = a; MusicPlayer.URL = list[a]; MusicPlayer.Ctlcontrols.play(); } } //比较时间的值 }
运行截图:
本想添加一个显示歌曲歌词的功能的,但是找了半天也没找到歌词文件的下载方式。
这样一个简单的可以自用的播放器就做好啦!