IE盒子

搜索
查看: 213|回复: 1

迎接2023年用.NET给大家做了个音乐播放器,结尾还有福利 ...

[复制链接]

3

主题

9

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2023-1-19 14:41:56 | 显示全部楼层 |阅读模式
本公众号主为了给大家庆祝节日,特意用.net的winform程序给大家做了个音乐播放器,祝福大家节日快乐,祝福2023年天天快乐,升职加薪拿奖金!
项目主要使用Windows Media Player控件来实现功能,感兴趣的小伙伴可以使用第三方的nuget包来实现。实现步骤如下

一、环境搭建
使用vs2022新建一个winform程序,必须选择.NET FW版本(小编做winform比较少,不知道为啥)



建好项目之后添加Windows Media Player的com控件,在winform工具栏点击右键,选择”选择项“后打开选择工具箱项,然后点击COM组件勾选Windows Media Player点击确定便添加成功。如下图:






二、界面设计

上面添加了COM组件Windows Media Player后,工具箱便出现了Windows Media Player控件,首先拖动Windows Media Player到winform框。然后分别添加开始/暂停,停止,下一首,上一首按钮,再添加音乐的listbox列表框,并在列表框上添加选择音乐按钮。最后点击form框,设置一个form背景。如下图:




大家也可以根据自己的喜好来设置自己的界面。


三、实现功能代码
1、播放暂停代码
双击播放按钮,进入播放按钮事件,输入如下代码。
        private void pay_Click(object sender, EventArgs e)        {            if (pay.Text == "播放")            {                if (b)                {                    //获得选中的歌曲  让音乐从头播放                    PlayerMusic.URL = list[listBox1.SelectedIndex];                }                PlayerMusic.Ctlcontrols.play();                pay.Text = "暂停";            }            else if (pay.Text == "暂停")            {                PlayerMusic.Ctlcontrols.pause();                pay.Text = "播放";                b = false;            }        }2、停止、下一首和上一首代码如下

//停止 private void pause_Click(object sender, EventArgs e)        {            PlayerMusic.Ctlcontrols.stop();//停止        }//下一首        private void next_Click(object sender, EventArgs e)        {            //获得当前选中的索引            int a = listBox1.SelectedIndex + 1;            //清空所有选中的索引   这里是因为我们开启了多选属性,才需要清理            listBox1.SelectedIndices.Clear();            if (a == listBox1.Items.Count)            {                a = 0;            }            //将改变后的索引重新赋值给当前选中项的索引            listBox1.SelectedIndex = a;            PlayerMusic.URL = list[a];            PlayerMusic.Ctlcontrols.play();        }//上一首        private void up_Click(object sender, EventArgs e)        {            int a = listBox1.SelectedIndex - 1;            listBox1.SelectedIndices.Clear();            if (a < 0)            {                a = listBox1.Items.Count - 1;            }            //将改变后的索引重新赋值给当前选中项的索引            listBox1.SelectedIndex = a;            PlayerMusic.URL = list[a];            PlayerMusic.Ctlcontrols.play();        }3、选择音乐代码
  private void selectmusic_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);                //将音乐文件的文件名存储到listbox中                listBox1.Items.Add(Path.GetFileName(path));            }        }4、音乐列表代码
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)        {            if (listBox1.Items.Count == 0)            {                MessageBox.Show("请选择音乐!");                return;            }            try            {                PlayerMusic.URL = list[listBox1.SelectedIndex];                PlayerMusic.Ctlcontrols.play();                pay.Text = "暂停";                PlayerMusic.Text = PlayerMusic.Ctlcontrols.currentPosition.ToString();            }            catch { }        }5、设置listBox的删除菜单
listbox不能只添加不能删除吧,所以我们使用contextMenuStrip来实现listbox的删除菜单。在工具栏拖拽一个contextMenuStrip,然后在菜单中增加删除选项,然后在listbox属性中的contextMenuStrip选择拖拽的contextMenuStrip1。最后实现删除按钮的代码。代码如下:



        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);            }        }6、使用timer设置自动播放下一首
我这里使用了歌曲全部时常和当前播放时长去比较,当前播放时常+1等于全部时长时,我们就切换下一首,或者使用bool判断控件的播放状态也是一样的道理。代码如下:
private void timer1_Tick(object sender, EventArgs e)        {//如果播放器的状态正在播放中            if (PlayerMusic.playState == WMPLib.WMPPlayState.wmppsPlaying)            {                info.Text = PlayerMusic.currentMedia.duration.ToString() + "\r\n" + PlayerMusic.currentMedia.durationString + "\r\n" + PlayerMusic.Ctlcontrols.currentPositionString;                double b1 = double.Parse(PlayerMusic.currentMedia.duration.ToString());                double b2 = double.Parse(PlayerMusic.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;                    PlayerMusic.URL = list[a];                    PlayerMusic.Ctlcontrols.play();                }            }            //比较时间的值        }最终效果如下:



大家可以根据自己的喜好美化界面。
源码地址:https://github.com/xbhp/windowmusic
本案例仅供参考,大家有时间可以自己研究一下,开发一个自定义和属于自己的播放器。


福利:
奉上最新最强最全的面试资料,七天有效,赶紧下载
网盘资料链接:
https://pan.baidu.com/s/1T3Y2Bnkm3Wgpjt6Jj16ZEQ?pwd=rmrd




版权声明:本文来源于网友收集或网友供稿,仅供学习交流之用,如果有侵权,请转告小编或者留言,本公众号立即删除。
<hr/>关注公众号:DotNet开发跳槽❀觉得不错,请点个在看呀
回复

使用道具 举报

6

主题

8

帖子

20

积分

新手上路

Rank: 1

积分
20
发表于 2023-1-19 14:42:25 | 显示全部楼层
其实我想说有没有人用网易云音乐的OPEN API做一个WIN版的网易云出来……官方ELECTRON版的网易云性能实在太渣了……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表