2022年MP音乐播放器软件课程设计报告 .pdf
1 课程设计说明书课程设计名称:软件综合课程设计课程设计题目:音频播放器程序的设计与实现学 院 名 称:信息工程学院专业: 电子信息工程班级: 110414 班学号: 11041424 姓名:刘日华评分:教师:刘洪武20 14 年 2 月 22 日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 20 页 - - - - - - - - - 2 电子信息工程专业课程设计任务书20 13 20 14 学年 第 2 学期第 1 周 2 周正文:题目内容及要求1、设计题目:MP3 播放器的设计2、设计内容及要求:利用 MFC 应用程序、媒体控制接口MIC的基本知识,设计一个MP3 播放器。要求能够播放常用Windows 音频格式的文件;实现播放控制: 播放、暂停、 停止等; 实现音量控制:静音、声音放大减小;实现播放列表管理:加入文件、加入目录、删除文件等功能。进度安排2 月 17 日:完成需求分析,确定程序功能,确立程序设计思想;2 月 18 日 2 月 19 日:进行详细设计,实现编码;2 月 20 日:进行程序测试,完善编码;撰写设计说明书,准备验收;2 月 21 日:验收。学生姓名:刘日华指导时间第一周:周一至周五指导地点:综合试验楼中 506室任务下达2014 年 2 月 17 日任务完成2014年 2 月 21 日考核方式1. 评阅 2. 答辩 3.实际操作 4.其它指导教师刘洪武系(部)主任孙成立名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 20 页 - - - - - - - - - 3 目录引言 .5 一、设计程序的目的与要求.6 目的.6 要求6 二、方案实现与调试6 总体设计 .6 1、实现功能 6 2 、功能模块图 .7 详细设计 .7 1、界面布局 7 2、各模块功能设计 8 2.1 处理“打开”按钮 .9 2.2 处理“播放”按钮 .9 2.3 处理“暂停”按钮 .9 2.4 处理“停止”按钮 .9 2.5处理“音量”按钮 10 2.6 处理“退出”按钮 .10 3 操作步骤 .10 三、课程设计分析与总结.11 分析 .11 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 20 页 - - - - - - - - - 4 总结 .11 附录 .13 关键程序清单 13 参考文献 20 引言MP3 播放器的设计是利用MFC 应用程序、媒体控制接口MIC的基本知识而设计的。1.1 MFC 简介MFC 是 Visual C+是核心。 MFC 类库将所有图形用户界面的元素如窗口、菜单和按钮等都以类的形式进行了封装,MFC AppWizard向导根据继承性利用MFC 派生出自己的类, 并对 Windows 应用程序进行了分解,利用MFC 派生类对应用程序重新进行组装,同时还规定了应用程序中各个MFC 派生类对象之间的相互联系,实现了标准Windows 应用程序的功能,这就是向导生成的所谓MFC 应用程序框架。每个 MFC 类都包括了一些函数,函数放到类中,符合C+编程方法。这些函数,必须通过类定义对象才能使用1。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 20 页 - - - - - - - - - 5 1.2 MCI 简介MCI (Media Control Interface)媒体控制接口是MircroSoft 提供的一组多媒体设备和文件的标准接口, 它的好处是可以方便地控制绝大多数多媒体设备包括音频、视频、影碟、录像等多媒体设备,而不需要知道它们的内部工作状况。它所支持的媒体格式包括mp3、avi、wav、mpeg等等2。音频技术发展较早, 几年前一些技术已经成熟并产品化,音频技术主要包括四个方面: 音频数字化、语音处理、语音合成及语音识别。音频文件包括多种格式的文件,MP3 就是其中的一种。 MP3 的全称是 Moving Picture Experts Group,Audio Layer ,它所使用的技术是在VCD(MPEG-1) 的音频压缩技术上发展出的第三代,而不是MPEG-3。MP3 是一种音频压缩的国际技术标准,它一般需要MP3播放器来读取。一、 课程设计的目的与要求1、目的利用 VC+ 开发一个支持wav、mp3 、wma等不同音频格式的媒体播放器。通过课程设计掌握多媒体编程的基本原理。2、任务1)编程实现一个可支持多种音频格式的媒体播放器,其基本功能包括媒体播放、音量调节、播放进度选择、暂停、停止以及歌曲信息的查询与添加等;2)给出程序的总体设计和详细设计,要求程序总体架构名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 20 页 - - - - - - - - - 6 图、详细设计的流程图,函数、变量说明等3)给出程序运行、测试的详细结果。二、 方案实现与调试总体设计1 实现功能MP3 播放器主要对常用 Windows 音频格式的文件实现播放控制:播放歌曲、暂停播放、停止播放等;实现音量控制:静音、声音放大以及声音减小的功能。2 功能模块图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 20 页 - - - - - - - - - 7 图-1 系统功能模块图详细设计1 界面布局设计(1) 创建一个对话框类,类名为Mp3PlayerDlg。(2) 向对话框中添加 Group Box 控件、Static Text控件以及按钮控件。(3) 设置所添加的控件的属性。系统界面的运行结果图如图-2 所示。MP3 播放器打开文件播放歌曲暂停播放停止播放音量控制名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 20 页 - - - - - - - - - 8 图 -2 系统界面运行结果图Mp3Player 对话框中所用控件的属性描述如表-1 所示。表-1 对话框控件 ID 及其描述控件 ID 描述IDC_STATIC_INFO_WND Group Box 控件,用来显示“信息窗口”IDC_STATIC_INFO Static Text控件,用来显示各种信息IDC_STATIC_OPERATION Group Box 控件,用来显示“操作面板”IDC_BUTTON_OPEN 按钮控件,单击它用来选择歌曲IDC_BUTTON_PLAY 按钮控件,单击它用来播放歌曲IDC_BUTTON_PAUSE 按钮控件,单击它用来暂停播放歌曲IDC_BUTTON_STOP 按钮控件,单击它用来停止播放歌曲IDC_BUTTON_VOLUME 按钮控件,单击它用来设定音量IDC_BUTTON_QUIT 按钮控件,单击它用来退出程序2 各模块功能设计2.1 处理“打开”按钮名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 20 页 - - - - - - - - - 9 单击“打开”按钮后,在OnButtonOpen()函数中, 首先对文件类型进行过滤,调用DoModa()函数打开对话框选择一个媒体文件,通过 GetPathName() 函数获取文件路径, 通过 GetFileName()函数获取文件名后,调用 DisplayInfo()函数在 Static Text 控件上显示“你选择的歌曲是(文件名)” ,然后利用 GetDlgItem()函数设置“暂停”按钮以及“停止”按钮不可用。2.2 处理“播放”按钮单击 “播放” 按钮后, 在 OnButtonPlay()函数中, 通过调用 MCIMP3类的 MCIOpen()函数获取刚才选择的文件路径以及文件名,调用该类的 MCIPlay() 函数播放歌曲, 此时调用 DisplayInfo() 函数在 Static Text控件上显示“正在播放的歌曲是(文件名) ” ,进行歌曲的播放,然后利用 GetDlgItem()函数设置“播放”按钮不可用。2.3 处理“暂停”按钮单击“暂停”按钮后,在OnButtonPause() 函数中,首先通过调用 MCIMP3 类的 MCIPause()函数暂停正在播放的歌曲,然后调用DisplayInfo() 函数在 Static Text控件上显示“暂停播放歌曲(文件名)” ,此时的歌曲处于暂停时的进度上, 利用 GetDlgItem()函数设置“播放”按钮可用。2.4 处理“停止”按钮单击“停止”按钮后,在OnButtonStop()函数中,首先通过调用MCIMP3 类的 MCIPause()函数停止正在播放的歌曲,然后调用DisplayInfo() 函数在 Static Text控件上显示“停止播放歌曲(文件名)” ,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 20 页 - - - - - - - - - 10 将停止正在播放歌曲, 利用 GetDlgItem()函数设置“暂停”按钮和“停止”按钮不可用。2.5 处理“音量”按钮单击“音量”按钮后,在OnButtonVolume()函数中,首先调用WinExec()函数并且打开 C:/WINDOWS/System32/sndvol32.exe,弹出“主音量”对话框,在此对话框内可以对音量进行增大或减小以及静音的设置。2.6 处理“退出”按钮单击“退出”按钮后,在OnButtonQuit()函数中,调用CDialog类的 OnCancel()函数将退出对话框,结束程序的运行。3 操作步骤1)先在 VS环境下建立好一个基于对话框的工程。2)打开资源视图,在对话框内按照布局图布局,步好后根据表-1 来设置属性。添加相应的变量和函数。3)进行程序初始化。4)为各个按钮添加消息处理函数,并添加相应的代码。5)全部完成后进行测试和调试。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 20 页 - - - - - - - - - 11 三、 课程设计分析与总结分析按照课程设计的要求,我们用C/C+来实现功能,但由于我们在学过面向对象后, 我们常用的是 Visual Studio 2010版本的 VS 编辑器。在分析所要做的播放器时, 想到的最基本的功能就是可以播放音乐,其次就是对播放过程中的操作,如:快进或快退、上一曲或下一曲、播放 /暂停、音量大小、选择和添加歌曲、播放界面选择等等功能。但是,由于学识有限, 我们在这一周的时间内没有去考虑这么多功能,所以对于这样一个播放器, 还是存在很多的改进方案。 那么只有在以后的探索中慢慢来实现了。总结经过一周的面向对象程序课程设计,我学到了很多。 在这一周的实际动手学习中, 我对 VC+这门课程有了更深刻的认识,掌握了用MFC 创建基于对话框的应用程序,同时了解了MCI 相关知识。这次课程设计我做了MP3 播放器的设计,MP3 播放器主要对常用Windows 音频格式的文件实现播放控制:播放歌曲、暂停播放、停止播放等;实现音量控制:静音、声音放大以及声音减小的功能。本次课程设计中虽然可以实现播放、暂停、停止、播放界面美化以及音量等功能,但仍然存在着放多不足, 比如进度条功能没有实现、名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 20 页 - - - - - - - - - 12 列表管理的功能以及循环播放功能始终无法实现,如果有时间一定会好好研究。课设是辛苦劳累的, 但是收获同样是巨大的, 在课设中每解决一个问题,那种成就感是无法言语的, 课设中第一次调试程序时出现了很多错误,其中有逻辑错误,编译能通过,运行始终无法通过,后来经过思考,进行了多次修改调试之后得到了运行结果;但是还是存在兼容性问题,电脑版本和系统以及软件的版本之间存在各种兼容性问题,因为之前在程序中几乎没见到过,所以一时不知从何处检查并改进,后来在老师的帮助下,找到了问题,结果换了台电脑,经过改正调试最终达到了目的。像此类的问题还有很多,不过经过查询资料,咨询老师,与同学探讨最终得到了理想的程序。此外,我还得到了一个结论,在课程设计中, 老师的作用有时是不可或缺的,可以在关键时刻给我们一些重要的提示, 从而方便我们解决各种问题。 这就是我对这次软件课程设计的总结。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 20 页 - - - - - - - - - 13 附录关键程序清单BOOL CMp3PlayerDlg:OnInitDialog() /初始化 CDialog:OnInitDialog(); / Add About. menu item to system menu. / IDM_ABOUTBOX must be in the system command range. ASSERT(IDM_ABOUTBOX & 0 xFFF0) = IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); / Set the icon for this dialog. The framework does this automatically / when the applications main window is not a dialog SetIcon(m_hIcon, TRUE); / Set big icon SetIcon(m_hIcon, FALSE); / Set small icon / TODO: Add extra initialization here DisplayInfo(0,_T( 欢迎使用 Mp3Player!),_T(); GetDlgItem(IDC_BUTTON_PLAY)-EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_PAUSE)-EnableWindow(FALSE); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 20 页 - - - - - - - - - 14 GetDlgItem(IDC_BUTTON_STOP)-EnableWindow(FALSE); return TRUE; / return TRUE unless you set the focus to a control void CMp3PlayerDlg:OnButtonOpen() /打开 / TODO: Add your control notification handler code here char szFileFilter=All Music Files(*.*)|*.*|; CFileDialog FileOpenDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter/*, this*/); if( FileOpenDlg.DoModal() = IDOK ) m_csPathName = FileOpenDlg.GetPathName(); m_csSongName = FileOpenDlg.GetFileName(); DisplayInfo(1,_T( 你选择的歌曲是: ),m_csSongName); m_bIsOpened = TRUE; m_bIsNoSelectFile = FALSE; else m_bIsNoSelectFile = TRUE; if (m_bIsOpened & m_mcimp3.MCIIsPlaying() m_mcimp3.MCIClose(); m_mcimp3.MCIStop(); if (m_bIsOpened & m_mcimp3.MCIIsPlaying() & m_bIsNoSelectFile) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 20 页 - - - - - - - - - 15 m_mcimp3.MCIResume(); if (m_bIsOpened & m_bIsPressPauseBtn) m_bIsPauseOpen = TRUE; BOOL bIsPlayBtnEnabled = GetDlgItem(IDC_BUTTON_PLAY)-IsWindowEnabled(); if (!bIsPlayBtnEnabled) GetDlgItem(IDC_BUTTON_PLAY)-EnableWindow(TRUE); void CMp3PlayerDlg:OnButtonPlay() /播放 / TODO: Add your control notification handler code here if (m_bIsPauseOpen) if (m_bIsNoSelectFile) m_mcimp3.MCIResume(); DisplayInfo(1,_T( 继续播放歌曲: ),m_csSongName); m_bIsPressPauseBtn = FALSE; else m_mcimp3.MCIOpen(m_csPathName); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 20 页 - - - - - - - - - 16 m_mcimp3.MCIPlay(); DisplayInfo(1,_T( 正在播放的歌曲是: ),m_csSongName); GetDlgItem(IDC_BUTTON_PLAY)-EnableWindow(FALSE); m_bIsNoSelectFile = TRUE; else if (m_bIsOpened & m_bIsPressPauseBtn) m_mcimp3.MCIPlay(); DisplayInfo(1,_T( 继续播放歌曲: ),m_csSongName); m_bIsPressPauseBtn = FALSE; GetDlgItem(IDC_BUTTON_PLAY)-EnableWindow(FALSE); else if (m_bIsNoSelectFile) DisplayInfo(0,_T( 你还没有选择歌曲 ,点击播放没有意义! ),_T(); return; m_mcimp3.MCIOpen(m_csPathName); m_mcimp3.MCIGetLength(&m_dwLen); m_mcimp3.MCIPlay(); SetTimer(1, 1000, NULL); DisplayInfo(1,_T( 正在播放的歌曲是: ),m_csSongName); m_bIsPressStopBtn = FALSE; GetDlgItem(IDC_BUTTON_PLAY)-EnableWindow(FALSE); BOOL bIsPauseBtnEnabled = 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 20 页 - - - - - - - - - 17 GetDlgItem(IDC_BUTTON_PAUSE)-IsWindowEnabled(); if (!bIsPauseBtnEnabled) GetDlgItem(IDC_BUTTON_PAUSE)-EnableWindow(TRUE); BOOL bIsStopBtnEnabled = GetDlgItem(IDC_BUTTON_STOP)-IsWindowEnabled(); if (!bIsStopBtnEnabled) GetDlgItem(IDC_BUTTON_STOP)-EnableWindow(TRUE); void CMp3PlayerDlg:OnButtonPause() /暂停 / TODO: Add your control notification handler code here BOOL bIsPlaying = m_mcimp3.MCIIsPlaying(); if (bIsPlaying) m_mcimp3.MCIPause(); DisplayInfo(1,_T( 暂停播放歌曲: ),m_csSongName); m_bIsPressPauseBtn = TRUE; BOOL bIsPlayBtnEnabled = GetDlgItem(IDC_BUTTON_PLAY)-IsWindowEnabled(); if (!bIsPlayBtnEnabled) GetDlgItem(IDC_BUTTON_PLAY)-EnableWindow(TRUE); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 20 页 - - - - - - - - - 18 void CMp3PlayerDlg:OnButtonStop() /停止 / TODO: Add your control notification handler code here if (m_mcimp3.MCIStop()=0) /停止播放 m_bIsPressStopBtn = TRUE; m_bIsPressPauseBtn = FALSE; GetDlgItem(IDC_BUTTON_STOP)-EnableWindow(FALSE); DisplayInfo(1,_T( 停止播放歌曲: ),m_csSongName); m_mcimp3.MCIClose(); GetDlgItem(IDC_BUTTON_PAUSE)-EnableWindow(FALSE); BOOL bIsPlayBtnEnabled = GetDlgItem(IDC_BUTTON_PLAY)-IsWindowEnabled(); if (!bIsPlayBtnEnabled) GetDlgItem(IDC_BUTTON_PLAY)-EnableWindow(TRUE); void CMp3PlayerDlg:OnButtonQuit() /退出 / TODO: Add your control notification handler code here CDialog:OnCancel(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 20 页 - - - - - - - - - 19 void CMp3PlayerDlg:OnButtonVolume() /音量 / TODO: Add your control notification handler code here WinExec( C:WINDOWSSystem32sndvol32.exe, SW_NORMAL ); void CMp3PlayerDlg:DisplayInfo(bool bOPInfo,CString csInfo,CString csSongName) if (!bOPInfo) m_csInfo = csInfo; else m_csInfo = csInfo; m_csInfo += csSongName; GetDlgItem(IDC_STATIC_INFO)-SetWindowText(m_csInfo); void CMp3PlayerDlg:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call default if ( nIDEvent = 1) if ( 0 = m_dwLen ) KillTimer(1); DisplayInfo(1,_T( 已经播放完歌曲: ),m_csSongName); GetDlgItem(IDC_BUTTON_PAUSE)-EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_STOP)-EnableWindow(FALSE); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 20 页 - - - - - - - - - 20 return; m_dwLen-; CDialog:OnTimer(nIDEvent); 参考文献1 黄维通 .Visual C+面向对象编程教程 . 第三版. 北京: 清华大学出版社, 2011 2 侯俊杰 .深入浅出 MFC. 第 2 版. 广东: 南方出版社 , 2007 3 严华峰等 . Visual C+课程设计案例精编. 北京: 中国水利水电出版社, 20044 王维玉等 . Visual C+高级编程技术精粹 . 北京: 科学出版社 , 2008 5 陈国建等 .Visual C+ 范例开发大全 .北京:清华大学出版社, 2010 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 20 页 - - - - - - - - -