基于C#实现音乐播放器功能.docx
《基于C#实现音乐播放器功能.docx》由会员分享,可在线阅读,更多相关《基于C#实现音乐播放器功能.docx(31页珍藏版)》请在冰豆网上搜索。
![基于C#实现音乐播放器功能.docx](https://file1.bdocx.com/fileroot1/2023-1/23/628e3be1-3105-40d8-b101-80c9264240fc/628e3be1-3105-40d8-b101-80c9264240fc1.gif)
基于C#实现音乐播放器功能
摘要
现在互联网的迅速发展,互联网技术日益成熟,成熟的计算机信息技术给人们带来许多便利。
在日常的娱乐方式中,音乐不可缺少。
随着数字化音乐的形成,媒体播放器也往更高的质量发展。
本论文的目的在于开发PC端音乐播放器。
文章包含了对音乐播放器界面实现的方法和对后台代码的理解及掌握,主要实现通过电脑使用播放器进行音乐播放功能和简单的在线搜索的功能。
通过实践进一步理解播放器的需求,以及其开发过程,基本满足大众播放器的要求。
文中使用面向.netframe框架,设计了一个简单的音乐播放器。
该播放器可以实现播放功能、搜索功能、歌词显示等
关键字:
音乐播放器、Visualstudio2013、.netframework
Abstract
Withtherapiddevelopmentofmoderneconomyandthecontinuousdevelopmentofscienceandtechnology,computerinformationtechnologyisbecomingmoreandmoreprosperous.Musicasacommonwayofentertainmentinpeopleemusicplayertoplaysongsandtoexperiencethefunofprogramming,youcanusetheVisualstdio2013.
Thepurposeofthisistomakeeveryoneknowasimplewaytobuildamusicplayer,andthismethodismainlyachievedbytheVisualstdio.Articlecontainsthemethodofamusicplayerinterfaceimplementations,tounderstandandgraspthecode-behind,Themusicplayermeetstherequirementsofthepublicplayersbasically.Thisarticleuses.netframeworktodesignasimplemusicplayer.Thismusicplayercanplaysongs,searchonline,anddisplaythelyrics.
Keywords:
musicplayer.thevisualstdio2013..netframe
基于C#实现网络音乐播放器功能
1.C#概述
1.1什么是C#
VSC#是微软公司可视化开发工具中系列产品,是创建Windows应用程序最简单、快捷的开发工具之一。
C#是由C和C++衍生出来的面向对象的编程语言,一个是C#应用程序可以由文件组成,也可以由多个文件组成。
C#的优点,简单:
微软公司在设计C#语言时力求简单、尽量把一些复杂的东西,如宏、模板、多重继承消除。
面向对象:
C#是一个面向对象的编程语言,,支持面向对象的特性,如封装性、继承性和多态性。
强大灵活:
使用C#编程的用户几乎没有任何约束。
类型安全,C#去掉了指针,这从根本上保证了程序的稳定性和类型安全。
兼容性强:
C#允许访问不同的API。
1.2课题研究思路
用C#实现音乐播放器功能是从这个音乐播放器的基础功能出发,通过程序将音乐播放控制、音乐文件控制、歌词控制等功能模块化,让这些功能让人更加容易了解,个中一些模块的设定也能让人更加容易明白这种音乐播放器的设计,更可以对visualstdio软件的使用更加熟悉。
具体是通过.Netframe框架技术与medial控件调用技术来实现音乐播放的功能;播放列表的控制是通过timer与contextmenu的使用,webbroswer.navigate可以实现网络搜索功能。
2.系统分析
2.1功能分析
由当下几个流行的音乐播放器可知大众对音乐播放器的基本功能有哪些,以下分别描述:
编号:
1
用例名称:
播放器的换肤功能
参与者:
用户
目标:
用户可以更改播放器肤色
前置条件:
音乐播放器正常运行
基本事件流:
1.用户点击“换肤”按钮
2.播放器界面肤色随之更改
编号:
2
用例名称:
播放器的播放功能
参与者:
用户
目标:
用户可以播放本地计算机的音乐文件
前置条件:
音乐播放器正常运行
基本事件流:
1.选中要播放的音乐文件
2.点击“播放”按钮
编号:
3
用例名称:
播放器的暂停功能
参与者:
用户
目标:
用户可以暂停正在播放的音乐文件
前置条件:
音乐播放器正在播放音乐
基本事件流:
1.点击“停止”按钮
编号:
4
用例名称:
音乐文件的添加功能
参与者:
用户
目标:
用户可以把本地计算机里面的音乐文件添加至音乐列表中
前置条件:
播放器正常运行,并且在本地计算机中有音乐文件
基本事件流:
1.点击“选择音乐”按钮
2.系统弹出一个“选择文件”的对话框
3.选择要添加的音乐文件
后置条件:
播放器的音乐列表中有之前选择的音乐文件
编号:
5
用例名称:
音乐文件的删除功能
参与者:
用户
目标:
用户可以删除播放列表中之前添加的音乐文件
前置条件:
音乐播放器正常运行。
列表中有之前添加的歌曲文件
基本事件流:
1.选中要删除的音乐文件
2.右击删除文件
3.音乐文件在播放列表中被删除
后置条件:
音乐播放器的歌曲列表删除了被选中的歌曲文件
编号:
6
用例名称:
上一首/下一首功能
参与者:
用户
目标:
用户可以实现播放列表中的歌曲切换功能
前置条件:
音乐播放器正常运行。
歌曲列表中有上一首/下一首歌曲
基本事件流:
1.用户单击上一首/下一首按钮
2.可以播放歌曲列表中的上一首和下一首歌曲
编号:
7
用例名称:
歌词显示功能
参与者:
用户
目标:
播放器播放歌曲时会显示相对应的歌词
前置条件:
音乐播放器正常播放歌曲,并且在本地计算机音乐文件夹中有对应的歌词文件
基本事件流:
1.用户选中歌曲点击进行播放
后置条件:
播放器界面会以滚动的形式出现相对应的歌词
编号:
8
用例名称:
联网搜索功能
参与者:
用户
目标:
用户可以联网在线搜索歌曲
前置条件:
音乐播放器正常运行,并且有网络
基本事件流:
1.用户在输入框中键入搜索歌曲,点击“搜索”
后置条件:
搜索到的页面会显示在webbrowser空间中
2.2开发与运行环境
◆硬件平台:
CPU:
Intel(R)Celeron(R)CPUN2940@1.83GHz
内存4.00GB
64位操作系统
硬盘500GB
◆软件平台:
开发平台:
visualstdio2013;
运行平台:
windows7;
2.3可行性分析
项目的可行性分析主要包括技术可行性,经济可行性和法律可行性这3个方面的可行性研究。
2.3.1技术可行性
可行性研究的关键内容就是技术可行性。
在系统开发过程中遇到的难度最大的问题无疑就是技术可行性的研究了。
该播放器是用C#语言开发的,调试简单,对计算器的硬件要求也不高,一般PC完成能够满足开发要求。
软件方面:
基于微软开发平台使用的C#面向对象的编程语言,开发速度快,简单易用,技术成熟,软件也容易下载,完成满足开发需求。
2.3.2经济可行性
一个计算机系统的开发价值主要在于他带来的效益,尤其是经济效益。
一个项目的盈利额是扣除掉所有花费的成本之后剩余的部分,而根据盈利额也可以判断这个项目在经济上是否是可行的。
一般而言,一个软件的开发成本主要由4部分组成:
●购买并且安装软硬件以及相关设备的支出。
●系统开发的费用。
●系统安装,运行以及维护的费用。
●人员培训的费用。
本系统使用个人PC机,硬件投入小。
本系统所用的.net开发平台开发效率高,本系统开发人员少,使用本系统可以有效的节约人力。
2.3.3法律可行性
法律可行性的研究主要在于是否会侵害到他人的利益,是否会违反国家的法律法规。
在设计此音乐播放器时,没有损害到别人的利益,更没有违背国家有光规定。
因此本播放器在法律上是可行的。
综上所述,此次设计在技术上,经济上和法律上都是可行的。
3.系统设计
3.1设计概要
音乐播放器作为数字音乐实现的媒介最基本的是要具备支持多种音频格式的解码播放。
通过对大众用户的需求来看,播放器的呈现画面及其功能不应该设计得太繁杂,简单的画面更能让人产生好感。
在尽量减少内存占用的基础上实现大众播放器的基本功能。
该系统基本功能分为四个部分,下面对每个部分实现功能进行分析。
播放控制:
控制歌曲的播放,实现歌曲播放、暂停、停止,还可实现歌曲上一曲/下一曲的功能。
歌曲控制:
通过打开本地文件来实现歌曲的添加,可以逐个添加也支持批量添加;列表中的歌曲也可删除。
歌词控制:
播放器在播放音乐的时候,会进行自动扫描查看本地计算机是否存在相应的歌词文件,如果存在则会进行滚动播放。
联网控制:
这个播放器还可以接入网络在线进行歌曲搜索并且下载至本地。
注册和登陆:
播放时实现了与数据库进行连接
天气接口:
播放器实现了天气接口API
3.2功能模块
本系统的这个播放器,功能模块如下图1。
图1软件功能模块图
3.3系统各功能子模块设计
3.3.1开始模块
开始模块实现主要功能有:
初始化界面,初始化播放列表,显示天气接口。
程序一开始根据系统配置自动配置,根据系统配置的音乐路径进行初始化。
1、添加音乐文件
功能描述:
根据配置文件的配置的文件路径,将音乐加入到播放列表中,同时更新播放列表。
2、添加背景图片:
3、初始化天气接口
4、退出
3.3.2播放模式
播放模式的主要实现的功能是:
对歌曲进行打开/播放、暂停、停止、上一首、下一首、循环播放等控制。
1、歌曲播放模式:
(1)单曲循环
(2)顺序循环
(3)列表循环
(4)随机播放
2、歌曲暂停
3、歌曲停止
4、上一首/下一首
3.3.3音乐列表模块
1、播放列表的添加删除修改
2、从所有音乐列表里面添加音乐到我的音乐列表中,这边需要判断是否登陆。
3、在线音乐播放模块,在文本框中进行搜索,搜索的结果显示在在线音乐列表中。
并且下载音乐。
3.3.4界面设置模块
界面设置模块主要实现:
播放器的正常模式和放大模式,以及能够切换背景图片。
4.功能实现
4.1播放器框架设计
窗体在windows程序中是必不可少的。
任何一种windows程序都需要窗体。
在C#中,.NETFramework的Windows窗体应用程序是最普遍也是最重要的基于Windows平台的开发框架。
Windows窗体可以包含控件,控件是一种可见的供用户输入数据的界面元素。
众多的窗体、菜单、文本框、列表等显示元素集合在一起形成类,众多相关的类又组成了NET类库。
类库中含有很多种控件、组件和容器。
利用这些可以设计一款简单方便使用的界面。
用户可以依据需求,通过控件对类库中的元素进行调用,可以对界面进行编辑,设计自己喜欢的外观。
但是这一工程很耗时,许多程序非常繁杂,所以这里直接用一些图片来作为背景。
虽然并不一定能做到非常美观,但至少是可以满足舒适的外观要求。
通过设计界面的操作,也更进一步掌握了窗体和控件的使用,界面主要由窗体与控件拖放构成,视图设计器能自动生成大部分代码。
4.1.1命名空间结构
采用windows窗体应用结构,其命名空间结构为:
4.1.2App.config
4.2歌曲添加模块
这个播放器打开本地计算机音乐文件的方式主要依靠的是openfiledialog组件,预先设置好一个打开文件的路径,在播放器界面点击“选择音乐”的时候能跳出之前设置好路径的对话框,打开对话框的时候可以自动筛选,显示音乐文件以供选择添加。
具体代码如下:
///
///获取播放歌曲
///
privatevoidGetSong()
{
//接收播放歌曲方法,获得一个歌曲对象
this.mySong=PlayList.Play();
//如果歌曲对象不为空
if(mySong!
=null)
{
//播放器路径设置为该歌曲路径
stringt=mySong.FileName.Substring(0,mySong.FileName.IndexOf(".")+1)+"mp4";
wmp.URL=mySong.FileName;//t;//"F:
\\KuGou\\AmyDiamond-Heartbeats.mp4";//mySong.FileName;
//调用方法,显示歌曲名、歌手
lblName.Text=PlayList.GetName();
lblSinger.Text=PlayList.GetSinger();
mySong.SongState=SongPlayState.played;//修改播放状态
//播放按钮图片修改为暂停图片
btnPlay.Image=Image.FromFile("Images\\stop.png");
try
{
//读取歌词路径
Path.ReadLrc();
AddLrc();
//启动一个定时器,此定时器只控制歌词轮播
timer2.Start();
}
catch(Exception)
{
LrcNull();
itemLrc=newListViewItem();
itemLrc.SubItems.Add("找不到该歌曲歌词文件!
");
itemLrc.ForeColor=Color.Blue;
itemLrc.Font=newFont("微软雅黑",14.25F,((FontStyle)((FontStyle.Bold|FontStyle.Underline))),GraphicsUnit.Point,((byte)(134)));
lvLrc.Items.Add(itemLrc);
}
}
}
4.3歌曲删除模块
我们实现了将歌曲添加至播放列表的功能所以也要实现将不需要的歌曲从播放列表删除的功能。
更改listbox1的属性,selectionmode的默认属性值为selectionmode.One,将selectionmode选为multiextended,便可以实现对歌曲的多项选择。
所以我们在多选删除的时候,在获得了要清除的歌曲的数量后,根据索引删除,先删除集合,然后再删除列表,代码如下:
privatevoidtsmiAdd_Click(objectsender,EventArgse)
{
if(lvSong.CheckedItems.Count>0)
{
foreach(ListViewItemiteminlvSong.CheckedItems)
{
//遍历播放集合,如果存在不添加
foreach(SongsinPlayList.play)
{
if(s.Name==item.Text)
{
PlayList.play.Remove(s);
break;
}
}
PlayList.play.Add(item.TagasSong);
}
}
}
//所有歌曲:
删除选中歌曲
privatevoidtsmiDel_Click(objectsender,EventArgse)
{
foreach(ListViewItemiteminlvSong.Items)
{
if(item.Checked)
{
PlayList.song.Remove(item.TagasSong);
}
}
BindAllLV();
}
效果图如下:
4.4播放控制模块
播放音乐是播放器的基本功能。
这个部分讲的是歌曲播放的功能。
简单包括的部分是:
取消自动播放、点击播放歌曲、上一曲/下一曲歌曲切换。
4.4.1启动自动播放
当你给音乐播放器预先赋予音乐文件路径时,音乐播放器会在加载程序后时候自动播放音乐,所以要在加载程序时就先取消音乐播放器的自动播放功能。
代码如下:
privatevoidBindPlayLV()
{
//如果播放集合不为空
if(PlayList.play!
=null)
{
lvPlay.Items.Clear();
//遍历集合绑定播放LV
foreach(SongsinPlayList.play)
{
intid=lvPlay.Items.Count+1;
s.Id=id;
ListViewItemitem=newListViewItem(id.ToString());
item.SubItems.Add(s.Name);
item.Tag=s;
lvPlay.Items.Add(item);
}
}
}
4.4.2双击播放音乐
给listbox1设置一个单击事件来实现点击播放列表中的音乐。
即在选中要播放的音乐文件以后,点击“播放”按钮进行播放音乐。
代码如下:
//双击列表项播放歌曲
privatevoidlvPlay_DoubleClick(objectsender,EventArgse)
{
//需要将改歌曲添加到PlayList中去
if(!
timer1.Enabled)
{
PlayList.id=(lvPlay.SelectedItems[0].TagasSong).Id;
timer1.Start();
}
if(lvPlay.SelectedItems.Count>0)
{
PlayList.id=(lvPlay.SelectedItems[0].TagasSong).Id;
this.mySong=null;
}
}
4.4.3歌曲切换
歌曲上一曲/下一曲的切换可以通过列表指针所指的加减来实现,当歌曲在播放时,想要切换到下一曲/上一曲,只需点击播放器界面的“下一曲”或者“上一曲”的按钮,即可实现下一曲/上一曲的切换。
代码如下:
//切换下一首,调用切歌方法
privatevoidbtnRight_Click(objectsender,EventArgse)
{
PlayList.Cut(false);
}
//上一首,调用切歌方法
privatevoidbtnLeft_Click(objectsender,EventArgse)
{
PlayList.Cut(true);
}
4.5自动播放下一曲
这个播放器可以实现自动播放下一曲,从而可以方便用户在听完一首歌曲的时候不用再手动点击播放。
可以保证播放列表里面的歌曲顺序播放。
我们用定时器显示歌曲文件的播放时长。
具体代码如下:
privatevoidtimer1_Tick(objectsender,EventArgse)
{
if(Path.songPath=="")
{
timer1.Enabled=false;
return;
}
//如果当前无播放歌曲,调用获取歌曲的方法
if(this.mySong==null)
{
GetSong();
}
else
{
//当前有歌曲播放
//判断是歌词还是mv界面
boold=lvLrc.Visible;//=false;
boold1=wmp.Visible;//=true;
if(d==false&&d1==true)
{
//GetMv();
}
}
//自动下一首,如果当前播放完毕
if(this.wmp.playState==WMPLib.WMPPlayState.wmppsStopped)
{
this.mySong=null;//将歌曲设为空
Path.lrcPath="";
Path.dicLrc.Clear();
PlayModel();
PlayList.PlayNext();
Thread.Sleep(1000);
}
//切歌,当前有播放歌曲且播放状态为cut
if(this.mySong!
=null&&this.mySong.SongState==SongPlayState.cut)
{
this.wmp.URL="";//置空
timer2.Stop();
Path.dicLrc.Clear();
Path.lrcPath="";
this.mySong=null;
}
//如果当前有播放歌曲,需要获取的一些属性
if(wmp.URL!
="")
{
//设置当前播放歌曲颜色
SongColor();
//获取音量控件显示值,根据控制刻度数量计算
this.trackBar1.Value=wmp.settings.volume/10;
//歌曲时间显示,一个是总长度,一个是已播放长度,字符串类型
lblAll.Text=wmp.currentMedia.durationString;
lblRun.Text=wmp.Ctlcontrols.currentPositionString;
//进度条,使用了两个lbl控件,歌曲长度/已播放长度=lbl1的宽/lbl2的宽
//乘1000为防止数据过小出现错误
doubletemp=(wmp.currentMedia.duration*1000)/(wmp.Ctlcontrols.currentPosition*1000);
doublewidth=lblLong.Width;
doubleavg=width/temp;
//判断>1为了防止avg数值小于int界限
if(avg>1)
lblRuning.Width=Convert.ToInt32(avg);
picRun.Left=lblRuning.Right;
//托盘显示播放歌曲
stringnoText=lblName.Text+lblSinger.Text;
if(getStringLength(noText)>64)
{
noText=cutSubstring(noText,30);
}
this.notifyIcon1.Text=noText;
}
else{
}
}
4.6显示歌词模块
音乐播放器的歌词显示功能主要是通过将歌曲文件名中的歌曲格式名称如“mp3”直接替换成歌词格式的“lrc”,以此来把歌词文件读取到数组之中,再