服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#基于winform实现音乐播放器

C#基于winform实现音乐播放器

2022-12-25 15:32向上的青春233 C#

这篇文章主要为大家详细介绍了C#基于winform实现音乐播放器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C#基于winform实现音乐播放器的具体代码,供大家参考,具体内容如下

首先,右键工具箱的组件,找到选择项,找到Windows Media Player组件并添加。

设计界面:

C#基于winform实现音乐播放器

首先实现基本的功能

给“”老板播放器“的播放暂停添加代码

?
1
MusicPlayer.Ctlcontrols.play();  //播放
?
1
MusicPlayer.Ctlcontrols.pause();//暂停
?
1
MusicPlayer.Ctlcontrols.stop();//停止

首先给Windows Media Player控件改名为MusicPlayer,并在程序加载时关闭自动播放和赋予一个默认的地址。

?
1
2
3
4
5
6
7
8
9
 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");
        }

接下来是播放键的按钮

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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添加双击事件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 /// <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 { }
        }

接下来是打开按钮,我们需要打开对话框选取想要的音乐文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 /// <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即可

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 /// <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控件中的内容,否则会引起程序的异常。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 /// <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控件添加了图片(百度自行找播放和暂停的图片即可)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 /// <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判断控件的播放状态也是一样的道理

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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实现音乐播放器

本想添加一个显示歌曲歌词的功能的,但是找了半天也没找到歌词文件的下载方式。

这样一个简单的可以自用的播放器就做好啦!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/weixin_44006686/article/details/114598370

延伸 · 阅读

精彩推荐
  • C#WinForm实现自定义右下角提示效果的方法

    WinForm实现自定义右下角提示效果的方法

    这篇文章主要介绍了WinForm实现自定义右下角提示效果的方法,涉及WinForm自定义提示效果的实现方法,具有一定参考借鉴价值,需要的朋友可以参考下...

    我心依旧11432021-10-21
  • C#c#中object、var和dynamic的区别小结

    c#中object、var和dynamic的区别小结

    这篇文章主要给大家介绍了关于c#中object、var和dynamic的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    杨帆4652022-10-10
  • C#C#实现打开画图的同时载入图片、最大化显示画图窗体的方法

    C#实现打开画图的同时载入图片、最大化显示画图窗体的方法

    这篇文章主要介绍了C#实现打开画图的同时载入图片、最大化显示画图窗体的方法,涉及C#针对窗体及图片操作的相关技巧,具有一定参考借鉴价值,需要的朋友...

    我心依旧5222021-10-21
  • C#c#基于winform制作音乐播放器

    c#基于winform制作音乐播放器

    这篇文章主要介绍了c#基于winform制作音乐播放器的方法,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下...

    程序员ken9942022-11-08
  • C#c# 网络编程之tcp

    c# 网络编程之tcp

    这篇文章主要介绍了c# 网络编程之tcp的的相关资料,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下...

    seabluescn8702022-11-01
  • C#C# 重写ComboBox实现下拉任意组件的方法

    C# 重写ComboBox实现下拉任意组件的方法

    C#种的下拉框ComboBox不支持下拉复选框列表与下拉树形列表等,系统中需要用到的地方使用了第三方组件,现在需要将第三方组件替换掉。这篇文章主要介绍...

    C#教程网7102021-12-08
  • C#C# byte转为有符号整数实例

    C# byte转为有符号整数实例

    这篇文章主要介绍了C# byte转为有符号整数实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    小鹰信息技术服务部3762022-10-14
  • C#C#中datagridview使用tooltip控件显示单元格内容的方法

    C#中datagridview使用tooltip控件显示单元格内容的方法

    这篇文章主要介绍了C#中datagridview使用tooltip控件显示单元格内容的方法,实例分析了C#控件的相关使用技巧,需要的朋友可以参考下...

    aparche7692021-11-24