




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、简单音乐播放器 计算机科学与技术学部C+课程设计题 目 简单音乐播放器 学 部 计算机科学与技术 班 级 1103 指 导 教 师 李 军 姓 名 周德群,胡中立 2012年6月13日摘 要音乐播放器,是目前用户选择播放任意格式的音频文件的软件,如酷狗、QQ音乐等。一般的音频播放器,都可以支持MP3、wave、AU、VOC等文件格式的播放。在此次设计的音频播放其中,可以实现对音频文件的打开、播放、暂停、停止、上一曲/下一曲、音量调控等操作。由于MCI(Media Controller Interface)命令接口编程易于实现,具有体积小、支持的播放格式多、系统资源占有少等优点,同时MCI支持播
2、放列表编辑、支持文件的打开、保存等功能,所以本课题利用Visual C+ 6.0作为开发环境,结合其自带的MCI函数库和MVC设计思想开发一个简洁实用的播放器软件,为用户提供一个友好的图形化操作界面。关键词:媒体播放器;播放列表;音频;MCI函数课程设计任务分配表 表1 信息表姓名主要工作组长周德群负责整个工程设计的选材和功能的添加以及代码的设计,负责工程的功能测试与修改。组员胡中立负责对话框的设计、制作、控件的添加。课程设计成绩表表2 成绩表姓名学号班级成绩组长周德群114329021530631103组员胡中立114330248130541103目 录前 言1第1章 课题背景和概述21.1
3、 课题背景21.1.1 音频播放器简介21.1.2 目的和意义21.2 课题概述21.2.1 功能简介21.2.2 主要工作和理论依据.3 第2章 设计简介及设计方案论述42.1 需求分析42.2 系统功能及结构简介42.2.1 系统功能42.2.2 系统结构4第3章 详细设计53.1 界面设计53.1.1 播放器界面设计53.1.2 按钮上的位图显示53.2 各模块功能设计63.2.1 各按钮功能的实现63.2.2 进度条显示7第4章 设计结果及分析84.1 运行结果显示94.1.1打开文件并播放104.2 结果分析和不足10总 结11参考文献12附 录.13 前 言音频播放器(audio
4、player)是一种可储存、组织与播放音讯档案格式装置。常被称为“MP3播放器”(因为MP3格式的普遍性),它可以播放很多其他的格式,如WMA,AAC,WAV等。所以,应运而生的是音频播放器软件,能够为用户播放常见的格式音频文件。并且,在使用的过程中,也尽可能设计出一些人性化的设计。比如,能最小化到托盘并可以进行操作。良好的人机交互界面,也能给人以美好的感官享受。本次设计完成的播放器软件,能够支持播放多种格式的音频文件,常见的如MP3,WMA,AAC,WAV等。对正在播放的歌曲,可以进行暂停、停止的操作,也可以任意添加歌曲并选择播放。此播放器也可以最小化和最小化到托盘,方便用户在播放音乐的时候
5、,免受打扰。也可以在最小化到托盘的状态下,退出播放器。本次课程设计,主要是检验这一学期,我们通过对MFC Windows应用程序设计这门课学习,能够把所学的知识应用到实际的能力。第1章 课题背景和概述1.1 课题背景1.1.1 音频播放器简介音频播放器(audio player)是一种可储存、组织与播放音讯档案格式的装置。常被称为“MP3播放器”(因为MP3格式的普遍性),它可以播放很多其他的格式,如WMA,AAC,WAV等。一些格式会跟有限制性的技术 DRM合并, 比如Janus和FairPlay, 一般是一些付费下载网站的一部分。其它一些格式则是完全的专利自由或者在另外一些方面开放,比如O
6、gg Vorbis,FLAC,Speex (Ogg开放多媒体工程的所有部分),以及Module file格式。1.1.2 目的和意义通过独立设计完成制作一个播放器软件,更加理解了MFC对话框的构成框架,以及各个类之间数据传递的关系。同时,对鼠标和键盘的多消息响应有了进一步的认识。在设计制作的过程中,C+语言是基础,在熟悉MFC Windows 程序设计的同时,也了解了C+程序语言设计。1.2 课题概述1.2.1 功能简介本次设计完成的播放器软件,能够支持播放多种格式的音频文件,常见的如MP3,WMA,AAC,WAV等。对正在播放的歌曲,可以进行暂停、停止的操作,也可以任意添加歌曲并选择播放。此
7、播放器也可以最小化和最小化到托盘,方便用户在播放音乐的时候,免受打扰。也可以在最小化到托盘的状态下,退出播放器。本次课程设计,主要是检验这一学期,我们通过对MFC Windows应用程序设计这门课学习,能够把所学的知识应用到实际的能力。1.2.2 主要工作和理论依据MFC类库将所有图形用户界面的元素如窗口、菜单和按钮等都以类的形式进行了封装,MFC AppWizard向导根据继承性利用MFC派生出自己的类,并对Windows应用程序进行了分解,利用MFC派生类对应用程序重新进行组装,同时还规定了应用程序中各个MFC派生类对象之间的相互联系,实现了标准Windows应用程序的功能,这就是向导生成
8、的所谓MFC应用程序框架。每个MFC类都包括了一些函数,函数放到类中,符合C+编程方法。这些函数,必须通过类定义对象才能使用。 在本次设计中,首先,理清课程设计和编写程序的思路,明确程序所要用到的函数,并做好了解。然后,再利用C+类的继承与派生原理来构造所需要的类,编写实现每项功能的详细代码。利用MFC提供的菜单资源来创建菜单,通过类向导建立类,函数,或者消息响应,来实现播放器的各种功能。第2章 设计简介及设计方案论述2.1 需求分析 随着社会的发展,有越来越多的人接触电脑,也有越来越多的人喜欢在上网、工作的时候,播放一点音乐,娱乐一下,缓解一下。所以,应运而生的是音频播放器软件,能够为用户播
9、放常见的格式音频文件。并且,在使用的过程中,也尽可能设计出一些人性化的设计。比如,能最小化到托盘并可以进行操作。良好的人机交互界面,也能给人以美好的感官享受。2.2 系统功能及结构简介2.2.1 系统功能此音频播放器可以播放多格式的音频文件。在播放的时候,需要打开本地的音乐文件,选择想要打开的文件,点击播放便可以播放。在播放的过程中,如果有事离开想要停止播放,可以点击暂停按钮,等到需要的时候,仍然可以点击播放,继续播放。如果需要退出,点击关闭按钮即可。如果想换首歌,点击下一首或者上一首的按钮便可以了。2.2.2 系统结构此播放器编写的时候,利用的是MFC对话框程序的构成框架,然后再利用Wind
10、ows提供的资源,运用控件,自己制作了对话框和人机交互界面。在制作界面的同时,也制作了各个按钮,并完成各个按钮的消息响应,便完成响应函数实现了功能。第3章 详细设计3.1 界面设计3.1.1 播放器界面设计打开VC C+6.0新建一个工程,选择对话框。便生成了一个窗口。然后打开ResouceView,点开Dialog,插入Dialog,利用控件,绘制各个按钮。如图3-1所示 图3-1为对话框添加9个按钮(Button),在Styles标签中选中Bitmap属性。将它们的ID分别为 IDC_PREVIOUS 上一首 IDC_AHAND 前进 IDC_PAUSE 暂停IDC_PLAY 播放 IDC
11、_NEXT下一首 IDC_BACK 后退 IDC_STOP停止IDC_LIST1 ADDFILE添加 IDC_DELETEFILE删除IDCANCEL取消 IDC_SLIDE。以实现对文件的各项操作。然后,在ClassWizard里为2个按钮分别添加变量,分别命名为; IDC_LIST m_list, IDC_SLIDE m_position以对按钮进行操作。然后为其他的控件添加响应函数发出单机消息。3.2 各模块功能设计3.2.1 各按钮功能的实现(1)处理“打开”按钮单击“打开”按钮后,在Onopen()函数中,首先对文件类型进行过滤,调用OpenFiles()函数打开对话框选择一个音频文
12、件,通过InitPath()函数获取文件路径,通过InitPath()函数获取文件名后,调用SaveList()函数在Static Text控件上显示你所选择的歌曲文件名,然后再单击播放按钮,便可以播放歌曲。 (2) 处理“播放”按钮单击“播放”按钮后,在OnPlay()函数中,通过调用Midi类中的Open()函数获取刚才选择的文件路径以及文件名,调用该类的Midi类中的Play()函数播放歌曲,此时调用DisplayInfo()函数在Static Text控件上显示正在播放的歌曲,进行歌曲的播放,然后利用GetDlgItem()函数设置“播放”按钮不可用。(3) 处理“停止”按钮单击“停止
13、”按钮后,在OnStopBUTTON()函数中,首先通过调用Midi类的Stop()函数停止正在播放的歌曲,此时的歌曲处于暂停时的进度上,利用GetDlgItem()函数设置“播放”按钮可用。(5)处理“上一曲/下一曲”按钮单击“上一曲”按钮时,在OnNextBUTTON()函数中,通过调用Midi类中的Next()函数,停止当前播放放的歌曲,并播放当前列表中的下一曲。“下一曲”按钮的处理与“上一曲”类似。(6) 处理“关闭”按钮单击“关闭”按钮后,在OnCloseWindow()函数中,调用CDialog类的OnOK()函数将退出对话框,结束程序的运行。(7)处理“快进”按钮 单击“快进”按
14、钮时,在OnAhand()函数中,通过调用mci函数并快进播放的歌曲,后退与“快进”类似。3.2.2进度条显示进度条在前进的过程中,其总长度应该为歌曲长度。如果想要在一首歌播放完毕后,进度条加好走完,必须先利用GetMediaLength(nLength, bProgress)函数获取歌曲长度,然后利用UpdatePlayTime(BOOL bProgress)函数不断更新歌曲播放的时间,最后通过OnTimer()来实现。在播放的过程中,依旧存在一些问题。比如,不能通过双击歌曲来达到播放的目的。如果想完成“上一曲/下一曲”的操作,在添加歌曲文件的时候,必须是一次性的添加多首歌曲。如果每次只添加
15、一首,添加多次,便不能完成歌曲之间的更换。第4章 设计结果及分析4.1 运行结果显示4.1.1打开文件并播放点击“增加”按钮,选择想要播放的歌曲,所选择的文件会显示在“播放列表”中。想要播放哪一首,点击播放即可。点击“下一曲”按钮,功能实现如下图所示。点击“上一曲”按钮,功能实现如下图所示。点击“快进”按钮,功能实现如下图所示。点击“删除”按钮,功能实现如下图所示。4.2 结果分析和不足虽然说这次的设计结果,从表面上看来,基本功能是实现了。但依旧还是存在很多不足。最突出的就是进度条的问题。进度条在前进的过程中,其总长度应该为歌曲长度。如果想要在一首歌播放完毕后,进度条加好走完,必须先利用Get
16、MediaLength(nLength, bProgress)函数获取歌曲长度,然后利用UpdatePlayTime(BOOL bProgress)函数不断更新歌曲播放的时间,最后通过OnTimer()来实现。但是在设计的过程中,编译和连接都没有错误,却不能运行处预料的结果,还有明显的错误。在网上查阅资料的过程中,也没有找到解决的办法。总 结在为期一个月的课程设计制作中,我们深深的体会到了团队合作的重要性,虽然在编程的过程中我们遇到了很多的困难,但在团队的合作下都一一克服,在解决问题的同时我们学到了很多老师上课所没有传述的知识,也让我们更加熟悉了编程的操作和word文档的编写。 在这次的课程设
17、计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。学会了合作,学会了宽容,学会了理解,也学会了做人与处世。C+作为我们的主要专业课程之一,开始觉得那些程序枯燥无味,但在这次课程设计后我发现在自己一点一滴的努力中对C+程序的兴趣也在增加。 可是在制作的过程中,编程总是运行错误成为了我们非常大的困难之一,常常在悉心时久的编程后,运行出现错误,往往是越改越错,导致此段代码需要重新编写,但在前面代码的不断出错与修改的同时,我们也学到了更多,领悟到了上课所没有领会的知识点,所以在后面的编程
18、中就越编越顺。 一个月前我们还为如何下手感到措手不及。最后还是在老师的耐心分析和指导下完成了课程的思路和工作的分配。比如在调试时发现,程序运行后一直无法返回至主菜单,且VC也无法识别出程序的错误,使我们一直困扰多时,后来经过了讨论和分析后解决了此问题。本以为最大的难题已经解决,但随之而来的问题远比我们想象的要困难的多。其次在这次课程中我们运用到了以前所学的专业知识,如;指针函数的调用,以及循环结构的运用和各种语句的分配。虽然过去从未独立运用过他们。但在设计过程中带这问题去学我发现效率很高。在设计之前我们对学生管理系统有一定的了解,知道要运用到C+的哪些知识,要一个清楚的思路和一个完整的程序图;
19、在程序设计时不要妄想一次就将整个程序设计好。反复修改,不断改进是程序设计的必经之路。 最后,作为软件技术专业的一名大学生,我觉的做C+语言课程设计是十分有意义的,而且是十分有必要的,我们在课堂上掌握的只是专业课的理论知识,而这次课程设计为我们提供了很好的实践平台。让我们增强了动手编程,自己调试,寻找错误的能力,为以后更好的学好C+语言提供了基础。参考文献1姬涛、周启生,计算机程序设计基础(上册)Z,北京:中国传媒大学出版社,20102谭浩强,C程序设计教程Z,北京:清华大学出版社,20073任哲,MFC Windows应用程序设计(第二版)Z,北京:清华大学出版社,2007附 录void CP
20、layerDlg:OnAhand() / TODO: Add your control notification handler code hereisPause=true;MCI_STATUS_PARMS mciStatusParms;MCI_PLAY_PARMS mciPlayParms;mciStatusParms.dwItem=MCI_STATUS_POSITION;mciSendCommand(m_wDeviceID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)(LPVOID)&mciStatusParms);dCurrentPosition=mciStatu
21、sParms.dwReturn;if(m_dLength-dCurrentPosition)SetWindowText(strshow);GetDlgItem(IDC_PAUSE)-SetWindowText(暂停);isPause=FALSE;MCI_GENERIC_PARMS mciPause;mciSendCommand(m_wDeviceID,MCI_PAUSE,0,(DWORD)(LPVOID)&mciPause);elseCString strshow;strshow=当前歌曲:+strFileName+ +状态:播放;this-SetWindowText(strshow);Get
22、DlgItem(IDC_PAUSE)-SetWindowText(播放);isPause=TRUE;if(strFileExt=mid|strFileExt=MID)MCI_STATUS_PARMS mciStatusParms;MCI_PLAY_PARMS mciPlayParms;mciStatusParms.dwItem=MCI_STATUS_POSITION;mciSendCommand(m_wDeviceID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)(LPVOID)&mciStatusParms);elseMCI_GENERIC_PARMS mciResu
23、me;mciSendCommand(m_wDeviceID,MCI_RESUME,0,(DWORD)(LPVOID)&mciResume);void CPlayerDlg:OnPlay() / TODO: Add your control notification handler code hereCString strshow;strshow=当前歌曲:+strFileName+状态:播放;this-SetWindowText(strshow);isPause=true;SetTimer(1,33,NULL);mciSendCommand(m_wDeviceID,MCI_CLOSE,0,NU
24、LL);MCI_OPEN_PARMS mciOpen;MCI_PLAY_PARMS mciPlay;mciOpen.lpstrElementName=strFileName.GetBuffer(strFileName.GetLength();mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT,(DWORD)(LPVOID)&mciOpen);m_wDeviceID=mciOpen.wDeviceID;MCI_STATUS_PARMS mciStatusParms;mciStatusParms.dwItem=MCI_STATUS_LENGTH;mciSen
25、dCommand(m_wDeviceID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,(DWORD)(LPVOID)&mciStatusParms);m_dLength=mciStatusParms.dwReturn;mciSendCommand(m_wDeviceID,MCI_PLAY,0,(DWORD)(LPVOID)&mciPlay);m_position.SetRange(0,m_dLength);m_position.SetPos(0);void CPlayerDlg:OnNext() / TODO: Add your control notificati
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 办公用房租赁合同范本
- 个人车库互换合同范本
- 单个房子改造合同范本
- 农田租合同范本
- 合伙创业餐厅合同范本
- ktv劳务合同范本
- 高压电工作业测试题及答案
- 出售二手房车库合同范本
- 兽医传染病学模拟试题及参考答案
- 仓储维保合同范本
- 生物产品检验检疫基础知识单选题100道及答案
- 江苏省中职《英语》学业水平考试备考试题集(含历年真题)
- 2025年合伙型公司新合伙人加入协议
- 2025年安全员之C证(专职安全员)考试题库
- 2025城市商铺买卖合同书
- 医院感染及其危害
- 2025年春新北师大版物理八年级下册课件 第六章 质量和密度 第一节 物体的质量及其测量
- 2024全国各省高考诗歌鉴赏真题及解析
- 《价值观培训》课件
- 《临床科研思维》课件
- GA/T 761-2024停车库(场)安全管理系统技术要求
评论
0/150
提交评论