本文实例为大家分享了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(); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? //比较时间的值 ? ? ? ? ?? ? ? ? ? }
运行截图:
本想添加一个显示歌曲歌词的功能的,但是找了半天也没找到歌词文件的下载方式。
这样一个简单的可以自用的播放器就做好啦!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
查看更多关于C#基于winform实现音乐播放器的详细内容...