基于mfc音乐播放器的设计与实现文档格式.docx
《基于mfc音乐播放器的设计与实现文档格式.docx》由会员分享,可在线阅读,更多相关《基于mfc音乐播放器的设计与实现文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
5.1文件菜单下的详细设计11
5.1.1打开文件设计11
5.1.2打开文件夹设计13
5.2播放音乐的详细设计13
5.3播放列表的详细设计14
5.4歌词显示的详细设计15
5.5播放器优化的详细设计15
6结论17
参考文献18
致谢19
摘要
音乐是一种声音符号,表达人的思想感情。
是人们思想的载体之一。
音乐是有目的和内涵的,其中隐含了作者的生活体验,思想情怀。
一款好的pc音乐播放器不仅能够提供好的音乐播放效果,更能够为用户提供方便的操作。
本设计利用C语言和VisualC++编辑工具对播放器进行编写。
同时给出了详细的系统设计过程、部分界面图及主要功能运行流程图,本文还对开发过程中遇到的问题和解决方法进行了详细的讨论,该音乐播放器集播放、暂停、停止、快进、快退、下一曲、上一曲、音量调节等功能与一体,性能良好。
在开发的过程中采用瀑布模型。
第一阶段首先对项目进行全面、仔细的需求分析,并准确做出项目进度安排,明确每个阶段的任务;
第二阶段是进行项目分模块编码;
第三阶段对项目进行全面的测试和系统集成测试。
本程序利用系统的MCI(mediacontrollerinterface)命令接口来编程,具有体积小、系统资源占用少等优点。
关键词:
VisualC++;
MCI;
播放器;
音频
Abstract
Themusicisasoundsymbolicexpressingthemoodandthinking.Itisthecarrierofpeople'
sthinking.Musicisthepurposeandcontent,whichimpliedtheauthor'
slifeexperiencesandfeelings.Agoodpcmusicplayercannotonlyprovidegoodmusicplayingeffect,butalsoprovideuserswithconvenientoperation.
TheplayerisusingClanguageprogrammingandVisualC++6.0editingtools.Givingadetailedsystemdesignprocess,partoftheinterfacemapandrunflowchartofthemainfunction,thisarticlediscussedindetailonproblemsandsolutionmethodinthedevelopmentprocess.Themusicplayersettoplay,pause,stop,fastforward,rewind,andthenextone,onavolumeadjustmentfunctionswithonegoodperformance.ThemodelinthedevelopmentprocessisWaterfallmodel.Thefirstphaseistheprojectofcomprehensiveandcarefulneedsanalysis,accuratelymakingtheprojectscheduleandclearingeachstageofthetask.Thesecondphaseoftheprojectissub-modulecoding.Thethirdstage,theprojecttestingandsystemintegrationtesting.
ThisplayerisbasedonC,referringtoMCI(mediacontrollerinterface)fromsystem,havingmanygoodfunctionssuchaslittlesize,takinguplesssystemresourceandsoon.
Keywords:
VisualC++;
mediaplayer;
Audio
1前言
1.1软件开发背景及意义
欣赏美妙的音乐是我们每个人在学习和工作之余都会做的事,面对网络上和市场上花样繁多的播放器,它们不但用起来感到容易上手,而且各种功能操作很方便。
大家都用过“酷狗音乐”,“QQ音乐”,“千千静听”等非常优秀的播放器,但是在使用的过程中总会有些瑕疵,而且这些公司也没有开放它们的源代码。
我设计的这个“基于C语言的音乐播放器”除了能够播放一些常见的音频格式外还易于操作和使用。
此软件具备一般播放器的常用功能,界面沿用了标准的Windows窗口,主窗口的功能有对要播放文件的各种控制,所播放曲目的名称,通过主窗口能有选择的播放单个文件,循环播放和单次播放目录表中的文件。
采用发环Windows编程接口,操作系统是WindowsXP,用到的主要技术为C语言,VisualC++编辑软件。
本次毕业设计的意义在于结合C语言提供的思想和多样的媒体控制方法,结合用户对媒体播放器的要求和使用音乐播放器的习惯,设计了一款界面简单明了,操作简单实,可以实现在播放列表中加载一个或多个多媒体文件;
用户能随意改变播放顺序;
自动连续播放多个多媒体文件;
在下次打开播放器时,能够自动加载上次的播放列表;
在播放列表的多媒体文件播放完后可以选择自动关闭播放器或者循环播放等功能的媒体播放器。
1.2发展现状及趋势
音乐播放器的设计是一门集数字多媒体技术和计算机技术于一体的综合设计。
随着中国宽带网络技术、计算机技术的发展,越来越多的人们开始重视多媒体播放器的应用与发展。
在当今信息社会以多媒体为特征的信息产业和信息技术的发展及应用对人类社会产生的作用及影响越来越明显,越来越重要,而音乐作为多媒体中的一个不可或缺的部分能改变信息的包装,实现了知识信息数字化,为人们获得知识信息提供了极大的方便和无尽的乐趣。
友好的人机界面、诱人的电子游艺节目、各种各样的多媒体教学软件、五花八门的信息家电和方便高效的网上查询、身临其境的多媒体导购系统等等,都渗透着多媒体的作用,它将人们带进了一个有声有色的世界。
与此同时,多媒体的应用和发展,极大地促进了各行各业的相互渗透和飞速发展,极大的改变了人类社会的工作环境和生活方式。
可以毫不夸张地说,多媒体产业的出现和发展,不仅掀起了计算机工业的一次革命浪潮,也正在深刻地影响着人类社会发生巨大的变革。
多媒体技术的发展在很大程度上依赖于多媒体软件开发的水平。
多媒体技术是当今信息技术领域中发展最快、最活跃的技术,是新一代电子技术竞争和发展的焦点。
多媒体技术融计算机、文本、声音、动画、图像、视频和通信等多种功能于一体,借助于日益普及的高速信息网,可以实现计算机的全球联网和信息资源的共享,因此被广泛的应用于咨询服务、教育、图书、通信、金融、军事、医疗等诸多行业,并正潜移默化地改变着我们的生活面貌。
人类社会逐渐进入信息化的时代,社会分工越来越明细,人际交往越来越频繁,分布性、交互性、群体性和协同性将成为人们劳动方式和生活方式的基本特征,其中大多数工作都需要群体的共同努力才能完成。
但在现实生活中影响和阻碍上述工作方式的因素有很多,例如打电话时对方不在。
即便是电话交流也只能通过声音,却很难看见一些重要的图纸资料,如果要面对面的交流讨论,需要昂贵的差旅费用和费时的长途旅行,这种方式不仅造成了效率低、费时长、而且开销大。
如今,随着通信技术和多媒体计算机技术的发展,两者相结合形成的分布式多媒体信息系统和多媒体通信较好地解决上述问题。
随着Internet的逐渐普及和网络技术的不断发展,人们对网络产品的需求也在不断增长。
如今网络上流行的音乐播放器虽然很多,但或多或少都存在一些缺陷,例如:
没有记忆播放的功能;
下一次播放的时候不能从上一次离开的曲目开始;
不能有效的保护媒体播放器里面的歌曲专有性;
没有身份认证功能;
界面太复杂以及操作太难;
功能组合与用户的习惯相违背等。
随着人们对娱乐要求的不断提高,一款别致的、贴近用户操作习惯的音乐播放器非常值得去研究和开发。
1.3主要研究方法及过程
研究方法:
主要采用行动文献法和研究法。
文献法,广泛收集整理文献资料,如经典期刊,国内外前沿研究,以及指导老师推荐的书目,为今后项目开发提供具有时代性,创造性的正面指导。
行动分析法,制定个性研究方案,通过我们日常实践情况进行分析,再研究调整重新进行实践。
首先,了解有关音乐播放器的有关技术,并对现在主流的音乐播放器进行测试并将它们不足之处改进。
并将经验总结、记录,形成有价值的文字。
研究手段:
主要是结合之前开发经验,联系项目参考文献和需求分析,根据项目的特点选择适当开发工具(VisualC++)和编程技术(编程语言C/C++)制定项目开发方案。
实验方案:
采用瀑布模型。
首先对项目进行全面、仔细的需求分析,并准确做出项目进度安排,明确每个人的职责和任务。
第二阶段,是进行项目分模块编码。
第三阶段,选择适当的测试方法,在完成项目编码后,进行软件测试,并准备填写测试用例。
对项目进行全面的测试和系统集成测试。
2相关技术简介
2.1VC技术应用的基本现状
Microsoft公司1998年推出了VisualC++6.0,它是支持Win32平台应用程序(application)、服务(service)和控件(control)开发的可视化编程的集成环境。
与VC++5.0的最大不同之处是它的帮助功能更强大,MSDN(MicrosoftDeveloperNetworking)为包括VC++6.0在内的所有微软的程序产品提供在线帮助;
另外,类的对象的可用成员函数、成员变量及函数的参数类型与个数都能动态显示在屏幕上,用户无须记住那些复杂而又枯燥乏味的函数名及复杂的参数,这无疑使得用VC++编程更加容易。
所以VC++6.0可谓是Microsoft公司的王牌产品,编程功能强大而赢得广大程序的偏爱。
多媒体技术已经在如下若干方面开展了有效的应用:
①多媒体管理信息系统、展示系统;
②多媒体电子出版物(Title);
③计算机辅助教学、教育培训;
④计算机艺术制作、设计;
⑤计算机娱乐-游戏、双向电影;
⑥协同工作。
有发下三大发展趋势:
进一步完善计算机支持的协同工作环境;
智能多媒体技术;
把多媒体信息实时处理和压缩编码算法集成到CPU中。
2.2MCI命令接口编程
WindowsMCI(mediacontrolinterface)是控制多媒体设备的高层、通用的命令接口。
MCI可控制所有Windows能驱动的多媒体设备,包括CD音频(CD Audio)、数字视频、动画、数字化波形声音、MIDI音序器、录像机及影碟机等。
MCI包含在Windows系统的MMSYSTEM.DLL动态链接库中,有以协调多媒体事件和MCI设备驱动程序之间的通信。
一些MCI设备驱动程序,如影碟机设备驱动程序,可以直接控制目标设备;
而另外一些MCI设备驱动程序,如Wave和MIDI设备驱动程序,可通过MMSYSTEM中的函数,间接控制目标设备;
还有一些MCI设备驱动程序则提供与其他Windows动态链接库连接的高层接口。
Microsoft提供的MMSYSTEM.H文件中定义了调用了MCI功能的数据类型和函数原型,在使用MCI功能的任何源模块中都应包含该文件。
2.2.1 MCI命令
应用程序能过MCI设备发送命令(命令消息或命令字符串)来控制MCI设备,MCI命令可以分为4类,如下所术。
1)系统命令:
直接由MCI解释并由系统处理,是不传送到MCI设备的命令。
2)通用命令:
所有MCI设备都支持的MCI命令。
3)可选命令:
MCI设备可选择使用的MCI命令。
4)专用命令:
针对某类MCI设备或集合的专有MCI命令。
MCI定义了两种接口方式,即命令消息方式和命令字符串方式。
相应地,MCI命令可分为命令消息和命令字符串。
主要的MCI命令及分类如表2所示,这些命令可能具有其相应的扩展形式。
表3-2MCI命令列表
MCI命令消息
MCI命令字符串
MCI命令说明
MCI命令类型
MCI_SYSINFO
SYSINFO
返回有关MCI设备的停息
系
统
命
令
MCI_BREAK
BREAK
为一个指定的MCI设备设置一个终止键
MCI_SOUND
SOUND
播放一段Windows指定的系统声音
MCI_CLOSE
CLOSE
关闭一个MCI
设备
通
用
MCI_GETDEVCAPS
GETDEVCAPS
获得一个MCI设备的性能参数
MCI_INFO
INFO
从一个MCI设备得到有关的信息
MCI_OPEN
OPEN
初始化一个MCI设备
MCI_STATUS
STATUS
从一个MCI设备返回有关的状态信息
MCI_LOAD
LOAD
从一个磁盘文件中加载数据
可
选
MCI_PAUSE
PAUSE
暂停播放数据
MCI_PLAY
PLAY
开始播放数据
MCI_RECORD
RECORD
开始记录数据
MCI_RESUME
RESUME
重新开始播放或记录
MCI_SAVE
SAVE
将数据存储到磁盘文件中
MCI_SEEK
SEEK
向前或向后检索
MCI_SET
SET
设置设备信息
MCI_STOP
STOP
停止播放或记录
2.2.2 MCI命令消息接口方式
MCI命令都可以带两个标志命令来控制命令的方式,即“wait”和“notify”。
它们在命令消息和命令字符串接口的形式和意思如表3所示。
表3-3 MCI标志命令
命令消息
命令字符串
功能
MCI_WAIT
wait
通知MCI设备等,MCI命令执行完后,才能将控制权还给应用程序
MCI_NOTIFY
notify
通知MCI设备等,立刻将控制权交给应用程序,但当命令执行完后,向应用程序发送MM_MCINOTIFY消息
所有MCI函数都以mci为前缀。
对应于MCI命令消息和命令字符串接口方式,MCI函数也分为两类,即命令消息函数和命令字符串函数。
在MMSYSTEM.H中定义了这些函数的原型。
MCI函数如表4所示。
表3-4 MCI函数
函数名
类型
mciSendCommand
发送命令消息
命令消息接口函数
mciGetDeviceID
获取MCI设备的ID
mciSetYieldProc
设定一个回调函数,在结束带wait标志的命令时调用
mciGetYieldProc
获取当前的回调函数
mciSendString
发送命令字符串
命令字符串接口函数
mciGetErrorString
获取当前MCI错误的字符串描述
公用函数
MCI命令消息接口方式利用消息和数据结构来给多媒体设备发送命令和接收MCI设备传来的信息。
这种方式的接口函数主要有3个,即mciSendCommand, mciGetDeviceID和mciGetErrorString。
它们的函数原型如下:
MCIERRORmciSendCommand(
MCIDEVICEIDIDDevice,//设备ID
UINTuMsg,//命令消息
DWORDfdwCommand,//命令消息标志
DWORDdwParam//命令消息使用的结构参数地址
);
MCIDEVICEIDmciGetDeviceID(
LPCTSTRlpszDevice//设备类型
BOOL(
DWORDfdwError,//错误代码
LPTSTRlpszErrorText,//错误描述
UINTcchErrorText//错误描述长度);
mciGetDeviceID通过传送MCI设备名lpszDevice来获取MCI_OPEN命令消息找开MCI设备的标识号wDeviceID,其值可用于mciSendCommand的参数wDeviceID。
mciSendCommand用于向标识号为wDeviceID的MCI设备发送命令消息uMsg。
当用送MCI_OPEN命令消息打开一个设备时,将自动创建一个设备标识号。
如果设备打开成功,可以从MCI_OPEN_PARMS结构的wDeviceID数据域中取得该设备的标识号,该值将保存以供后续的MCI命令使用。
如果mciSendCommand调用成功,则返回值为0;
否则表示设备驱动出错,这时可用mciGetErrorString来取得错误信息的文字描述。
MCI提供一个名为MCI_ALL_DEVICE_ID的特殊设备标识号。
当前所有已打开的MCI设备都将接收到对MCI_ALL_DEVICE_ID发送的任何MCI命令。
使用任何一个MCI设备前都应先用MCI_OPEN打开它。
打开MCI设备时,要求指定相应的MCI_OPEN_PARMS结构。
如果打开设备成功,则该结构的wDeviceID域返回MCI设备的标识号ID。
使用MCI_OPEN命令消息时可使用的命令消息中表5所示。
MCI_OPEN_PARMS结构定义如下:
typedefstruct{
DWORDdwCallback;
//回调窗口句柄
MCIDEVICEIDwDeviceID;
//设备打开成功,返回的设备号
LPCSTRlpstrDeviceType;
//设备类型
LPCSTRlpstrElementName;
//复合设备的设备元素,通常为文件名
LPCSTRlpstrAlias;
//指定的设备别名
}MCI_OPEN_PARMS;
表3-5 MCI_OPEN命令消息标志
消息标志
意义
MC_OPEN_ALIAS
MCI_OPEN_PARMS结构的lpstrAlias域中指定了设备别名
MC_OPEN_ELEMENT
MCI_OPEN_PARMS结构的lpstrElementName域中指定了设备元素
MC_OPEN_SHAREABE
按共享设备方式打开设备
MC_OPEN_TYPE
MCI_OPEN_PARMS结构的lpstrDeviceType域中指定了设备类型
MC_OPEN_TYPE_ID
MCI_OPEN_PARMS结构的lpstrDeviceType域中指定了设备类型ID
打开一个简单的MCI设备不需要指定设备元素,即不需要指定一个数据文件,所以可以仅仅指定MCI_OPEN_PARMS结构中的wDeviceID和lpstrDeviceType两个数据域。
要打开一个复合的MCI设备,必须指定设备元素数据域lpstrElementName和设备类型数据域lpstrDeviceType。
对于打开复合MCI设备,有以下3种方式可供选择:
1)为确定MCI设备的性能,可以只指定设备的类型来打开MCI设备。
这时,只允许确定MCI设备的性能,然后关闭设备,不般不能进行其它的操作。
2)为使一个设备元素与指定设备相联系,应同时指定设备元素(数据文件名)和设备类型。
这时可对设备进行相应的各种操作。
3)在使用隐含的MCI设备时,可只指定MCI设备(数据文件名),而把设备类型指定为NULL;
MCI将根据设备元素的扩展名从系统定义中选择隐含约定的MCI设备。
应用程序在使用完一个MCI设备后应明确地关闭该MCI设备。
MCI_CLOSE命令消息用于关闭并释放MCI设备,即取消应用程序对MCI设备或设备元素的访问权。
当用MCI_SYSINFO命令消息获取MCI设备系统信息时,需要在mciSendCommand的dwParam参数中指定MCI_SYSINFO_PARMS结构的地址,系统信息将通过该结构返回。
与MCI_SYSINFO命令消息相关的消息标志如表6所示。
MCI_SYSINFO_PARMS结构定义如下:
//回调窗口句柄
LPSTRlpstrReturn;
//返回信息缓冲区地址
DWORDdwRetSize;
//返回信息大小
DWORDdwNumber;
//索引号
UINTwDeviceType;
}MCI_SYSINFO_PARMS;
表3-6 MCI_SYSINFO命令消息标志
MCI_SYSINFO_QUANTITY
返回指定的设备类型的数目,如与MCI_SYSINFO_OPEN一起使用,则仅返回已打开的设备的数目
MCI_SYSINFO_NAME
返回设备名,如与MCI_SYSINFO_OPEN一起使用,则仅返回已打开的设备的名称
MCI_SYSINFO_OPEN
仅返回已打开设备的信息
MCI_SYSINFO_INSTALLNAME
指定设备的安装名称
在使用MCI设备时,还应注意共享、等待与通告等标志的使用。
2.2.3 MCI命令字符串接口方式
MCI命令字符串使用ASCII字符串来发送驱动MCI设备的命令,这种方式采用的接口函数有mciSendString、mciGetErrorString。
用于向MCI设备发送命令字符串,其函数原型如下:
MCIERRORmciSendString(
LPCTSTRlpszCommand,//指向一个以NULL结尾的MCI命令字符串,格//式如下:
comm.anddevice_nameargument
LPTSTRlpszReturnString,//指向一个用于存储MCI命令执行后返回的//字符串信息的缓冲区
UINTcchReturn,//缓冲区大小
HANDLEhwndCallback//指定一个接受MM_MCINOTIFY的窗口句柄,
//非MCI命令中包含了notify标志,否则该参数可忽略。
3需求分析
3.1功能需求
3.1.1播放器的基本控制需求
根据项目的目标,我们可获得项目系统的基本需求,以下从不同的角度来描述系统的需求,并且使用用例图来描述,系统的功能需求,我们分成以下几部分来概括,即播放器的基本控制需要,播放列表管理需求如图