

已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中北大学课 程 设 计 说 明 书学生姓名: 李衍朋 学 号: 37 学 院: 信息与通信工程学院 专 业: 信息工程 题 目: mp3播放器 陈平指导教师: 职称: 副教授 年 月 日下达任务书日期: 2016 年 5 月 27 日课 程 设 计 任 务 书1设计目的:通过设计,明确音频机的设计思想和设计过程,扎实掌握vc、c+或c语言编程的整体框架和步骤,使学生具有一定综合分析问题和解决问题的能力。2设计内容和要求(包括原始数据、技术参数、条件、设计要求等):功能说明:具有播放mp3音乐的功能。设计要求:课程设计的目的在于培养学生的综合素质,要求学生做到:(1)根据题目要求查阅有关资料,确定方案,写出设计方案;(2)根据对选题的理解,消化查阅资料,给出相关设计的流程图;(3) 在c语言、c+或vc环境下,实现各项功能;(4) 对结果进行分析总结。3设计工作任务及工作量的要求包括课程设计计算说明书(论文)、图纸、实物样品等:设计工作任务:(1) 了解课题背景,掌握基本技术,制定程序设计框架。(2) 完成设计内容:包括程序流程图和完成实现功能的程序代码,写出设计说明书。(3) 设计答辩。工作量的要求:(1) 通过查阅资料了解与音频播放程序设计相关的基本理论、原理以及背景知识,理解选题意义;(2) 掌握与音频播放程序相关的设计思想、原理、设计框架和步骤;(3) 完成音频播放程序的功能和程序代码的实现;(4) 通过实验验证程序代码的可行性;(5) 给出设计总结。课 程 设 计 任 务 书4主要参考文献:visual c+课程设计案例精编(第二版)5设计成果形式及要求:程序运行结果;课程设计说明书。6工作计划及进度:2016年5月30日 2016年6月1日:查资料 2016年6月2日 2016年6月7日:在指导教师指导下设计方案及程序2016年6月8日 2016年6月15日:学生上机调试程序,指导教师辅导2016年6月16日 2016年6月18日:完成课程设计说明书2016年6月19日:答辩系主任审查意见: 签字: 年 月 日目录1.摘要-11.1)设计内容-11.2)mci简介-11.2-任务-21.2-各模块功能设计-312-操作步骤-412-函数代码-52.课程设计分析与结果-133.总结-14参考文献-14141. 摘要 利用mfc应用程序、媒体控制接口mic的基本知识,设计一个mp3播放器。要求能够播放常用windows音频格式的文件;实现播放控制:播放、暂停、停止等;实现音量控制:静音、声音放大减小;实现播放列表管理:加入文件、加入目录、删除文件等功能 关键词:mp3播放器的设计 设计目的 利用vc+开发一个支持wav、mp3、wma等不同音频格式的媒体播放器。通过课程设计掌握多媒体编程的基本原理。 1) 设计内容 mp3播放器的设计是利用mfc应用程序、媒体控制接口mic 的基本知识而设计的。(mfc 简介) mfc是visual c+是核心。mfc类库将所有图形用户界面的元素如窗口、菜单和按钮等都以类的形式进行了封装,mfc appwizard向导根据继承性利用mfc派生出自己的类,并对windows应用程序进行了分解,利用mfc派生类对应用程序重新进行组装,同时还规定了应用程序中各个mfc派生类对象之间的相互联系,实现了标准windows应用程序的功能,这就是向导生成的所谓mfc应用程序框架。每个mfc类都包括了一些函数,函数放到类中,符合c+编程方法。这些函数,必须通过类定义对象才能使用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 任务: 1) 编程实现一个可支持多种音频格式的媒体播放器,其基本功能包括媒体播放、音量调节、播放进度选择、暂停、停止以及歌曲信息的查询与添加等; 2) 给出程序的总体设计和详细设计,要求程序总体架构 3)图详细设计的流程图说明等 表一2 各模块功能设计2.1 处理“打开”按钮 单击“打开”按钮后,在onfilechoice()函数中,首先对文件类型进行过滤,调用getsystemmene()函数打开对话框选择一个媒体文件,通过getpathname()函数获取文件路径,通过onfilechoice()函数获取文件名后,调用displayinfo()函数在static text控件上显示“你选择的歌曲是(文件名)”,然后利用pause()函数设置“暂停”按钮以及“停止”按钮不可用。 2.2 处理“播放”按钮 单击“播放”按钮后,在onplay()函数中,通过调用cmp3dlg类的getpathname函数获取刚才选择的文件路径以及文件名,调用该类的void play()函数播放歌曲,此时调用getdlgitemtext(idc_pause,strtemp)获取按钮状态,然后利用setdlgitemtext()函数设置“播放”按钮不可用。 2.3 处理“暂停”按钮 单击“暂停”按钮后,在onstop ()函数中,首先通过调用cmp3dlg类的pause()函数暂停正在播放的歌曲,getdlgitem(idc_play)-enablewindow(false),当暂停按钮按下时,通过getdlgitemtext(idc_pause,strtemp)获取按钮状态,此时歌曲处于暂停的进度条上,利用getdlgitem(idc_stop)-enablewindow(true)函数设置“播放”按钮可用。 2.4 处理“停止”按钮 单击“停止”按钮后,首先通过调用cmp3dlg类的stop()函数暂停正在播放的歌曲,getdlgitem(idc_play)-enablewindow(false)当stop按钮按下时,播放和暂停应该均不可用,此时的歌曲处于暂停时的进度上,利用getdlgitem(idc_stop)-enablewindow(true)函数设置“播放”按钮可用。 , 10 将停止正在播放歌曲,利用getdlgitem()函数设置“暂停”按钮和“停止”按钮不可用。 2.5 处理“音量”滑块 拉动“音量”滑块后,在m_slider.setrange(0,1000)中,设置滑块的移动范围为01000。在启动程序时,通过m_slider.setpos(500)函数设置滑块指针的初始位置设为500且代表初始音量为50 。 2.6 处理“退出”按钮 单击“退出”按钮后,在onexitbt()函数中,调用cdialog类的oncancel()函数将退出对话框,结束程序的运行3 操作步骤1) 先在vs环境下建立好一个基于对话框的工程。 2) 打开资源视图,在对话框内按照布局图布局,步好后根据 表-1来设置属性。添加相应的变量和函数。3) 进行程序初始化。4) 为各个按钮添加消息处理函数,并添加相应的代码。5) 全部完成后进行测试和调试。 函数代码/caboutdlgdialogusedforappaboutclasscaboutdlg:publiccdialogpublic:caboutdlg();/dialogdata/afx_data(caboutdlg)enumidd=idd_aboutbox;/afx_data/classwizardgeneratedvirtualfunctionoverrides/afx_virtual(caboutdlg)protected:virtualvoiddodataexchange(cdataexchange*pdx);/ddx/ddvsupport/afx_virtual/implementationprotected:/afx_msg(caboutdlg)/afx_msgdeclare_message_map();caboutdlg:caboutdlg():cdialog(caboutdlg:idd)/afx_data_init(caboutdlg)/afx_data_initvoidcaboutdlg:dodataexchange(cdataexchange*pdx)cdialog:dodataexchange(pdx);/afx_data_map(caboutdlg)/afx_data_mapbegin_message_map(caboutdlg,cdialog)/afx_msg_map(caboutdlg)/nomessagehandlers/afx_msg_mapend_message_map()/cmp3dlgdialogcmp3dlg:cmp3dlg(cwnd*pparent/*=null*/):cdialog(cmp3dlg:idd,pparent)/afx_data_init(cmp3dlg)m_int=0;/afx_data_init/notethatloadicondoesnotrequireasubsequentdestroyiconinwin32m_hicon=afxgetapp()-loadicon(idi_icon1);voidcmp3dlg:dodataexchange(cdataexchange*pdx)cdialog:dodataexchange(pdx);/afx_data_map(cmp3dlg)ddx_control(pdx,idc_slider,m_slider);ddx_text(pdx,idc_vol,m_int);/afx_data_mapbegin_message_map(cmp3dlg,cdialog)/afx_msg_map(cmp3dlg)on_wm_syscommand()on_wm_paint()on_wm_querydragicon()on_bn_clicked(idc_about,onabout)on_bn_clicked(idc_exitbt,onexitbt)on_notify(nm_customdraw,idc_slider,oncustomdrawslider)on_bn_clicked(idc_filechoice,onfilechoice)on_bn_clicked(idc_play,onplay)on_bn_clicked(idc_pause,onpause)on_bn_clicked(idc_stop,onstop)/afx_msg_mapend_message_map()/cmp3dlgmessagehandlersboolcmp3dlg:oninitdialog()cdialog:oninitdialog();/addabout.menuitemtosystemmenu./idm_aboutboxmustbeinthesystemcommandrange.assert(idm_aboutbox&0xfff0)=idm_aboutbox);assert(idm_aboutboxappendmenu(mf_separator);psysmenu-appendmenu(mf_string,idm_aboutbox,straboutmenu);/settheiconforthisdialog.theframeworkdoesthisautomatically/whentheapplicationsmainwindowisnotadialogseticon(m_hicon,true); /setbigiconseticon(m_hicon,false); /setsmalliconm_slider.setrange(0,1000);/滑块的移动范围01000m_slider.setpos(500);/滑块指针的初始位置设为500代表初始音量为50getdlgitem(idc_play)-enablewindow(false);/文件没有读取时所有按钮应该是不可选的getdlgitem(idc_pause)-enablewindow(false);getdlgitem(idc_stop)-enablewindow(false);/todo:addextrainitializationherereturntrue;/returntrueunlessyousetthefocustoacontrolvoidcmp3dlg:onsyscommand(uintnid,lparamlparam)if(nid&0xfff0)=idm_aboutbox)caboutdlgdlgabout;dlgabout.domodal();elsecdialog:onsyscommand(nid,lparam);/ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow/todrawtheicon.formfcapplicationsusingthedocumentiewmodel,/thisisautomaticallydoneforyoubytheframework.voidcmp3dlg:onpaint()if(isiconic()cpaintdcdc(this);/devicecontextforpaintingsendmessage(wm_iconerasebkgnd,(wparam)dc.getsafehdc(),0);/centericoninclientrectangleintcxicon=getsystemmetrics(sm_cxicon);intcyicon=getsystemmetrics(sm_cyicon);crectrect;getclientrect(&rect);intx=(rect.width()-cxicon+1)/2;inty=(rect.height()-cyicon+1)/2;/drawtheicondc.drawicon(x,y,m_hicon);elsecdialog:onpaint();/thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags/theminimizedwindow.hcursorcmp3dlg:onquerydragicon()return(hcursor)m_hicon;voidcmp3dlg:onabout()/todo:addyourcontrolnotificationhandlercodeherecaboutdlgdlg;dlg.domodal();voidcmp3dlg:onexitbt()/todo:addyourcontrolnotificationhandlercodeherecdialog:oncancel();voidcmp3dlg:oncustomdrawslider(nmhdr*pnmhdr,lresult*presult)/todo:addyourcontrolnotificationhandlercodehereupdatedata(true);m_int=m_slider.getpos()/10;setvolume(m_slider.getpos();updatedata(false);*presult=0;voidcmp3dlg:onfilechoice()/todo:addyourcontrolnotificationhandlercodeherecharszfilefilter=mp3文件(*.mp3)|*.mp3|wma文件(*.wma)|*.wma|wav文件(*.wav)|*.wav|所有文件(*.*)|*.*|;cfiledialogdlg(true,null,null,ofn_hidereadonly,szfilefilter);if(dlg.domodal()=idok)cstringstrfilepath=dlg.getpathname();cstringstrfilename=dlg.getfilename();setdlgitemtext(idc_filename,strfilename);load(this-m_hwnd,strfilepath);getdlgitem(idc_play)-enablewindow(true);/文件读取成功时所有按钮变可选的getdlgitem(idc_pause)-enablewindow(true);getdlgitem(idc_stop)-enablewindow(true);voidcmp3dlg:onplay()/todo:addyourcontrolnotificationhandlercodehereplay();setdlgitemtext(idc_pause,暂停);voidcmp3dlg:onpause()/todo:addyourcontrolnotificationhandlercodeherecstringstrtemp;getdlgitemtext(idc_pause,strtemp);/获取按钮状态if(strtemp.compare(暂停)=0)pause();setdlgitemtext(idc_pause,恢复);if(strtemp.compare(恢复)=0)resume();setdlgitemtext(idc_pause,暂停);voidcmp3dlg:onstop()/todo:addyourcontrolnotificationhandlercodeherestop();setdlgitemtext(idc_pause,暂停);getdlgitem(idc_play)-enablewindow(false);/当stop按钮按下时,播放和暂停应该均不可用getdlgitem(idc_pause)-enablewindow(false);/mp3音乐播放器.cpp:definestheclassbehaviorsfortheapplication./#includestdafx.h#includemp3音乐播放器.h#includemp3音乐播放器dlg.h#ifdef_debug#definenewdebug_new#undefthis_filestaticcharthis_file=_file_;#endif/cmp3appbegin_message_map(cmp3app,cwinapp)/afx_msg_map(cmp3app)/note-theclasswizardwilladdandremovemappingmacroshere./donoteditwhatyouseeintheseblocksofgeneratedcode!/afx_msgon_command(id_help,cwinapp:onhelp)end_message_map()/cmp3appconstructioncmp3app:cmp3app()/todo:addconstructioncodehere,/placeallsignificantinitializationininitinstance/theoneandonlycmp3appobjectcmp3apptheapp;/cmp3appinitializationboolcmp3app:initinstance()afxenablecontrolcontainer();/standardinitialization/ifyouarenotusingthesefeaturesandwishtoreducethesize/ofyourfinalexecutable,youshouldremovefromthefollowing/thespecificinitializationroutinesyoudonotneed.#ifdef_afxdllenable3dcontrols(); /callthiswhenusingmfcinashareddll#elseenable3dcontrolsstatic(); /callthiswhenlinkingtomfcstatically#endifcmp3dlgdlg;m_pmainwnd=&dlg;intnresponse=dlg.domodal();if(nresponse=idok)/todo:placecodeheretohandlewhenthedialogis/dismissedwithokelseif(nresponse=idcancel)/todo:placecodeheretohandlewhenthedialogis/dismissedwithcancel/sincethedialoghasbeenclosed,returnfalsesothatweexitthe/appli
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 晋城口碑营销活动策划方案(3篇)
- 淄博隔声板施工方案(3篇)
- 印度农田施工方案(3篇)
- 取样员考试题库及答案
- 心理学考研题目及答案
- 小学整数加减法题目及答案
- 冬请允许我拥抱你250字12篇范文
- 数学课《几何图形变换与性质》教学实践
- 农村科技研发与应用推广合同
- 一条路到达一个地方(14篇)
- 软件咨询面试题目及答案
- 2025年艾梅乙知识竞赛试题及答案
- 云南航空产业投资集团招聘笔试真题2024
- 2025年农产品质量安全追溯体系构建与农业供应链管理创新报告
- 临时救助政策解读
- 煤矿笔试题目及答案
- 2025年危化品经营单位安全管理人员培训全国考试题库(含答案)
- 广西统考卷(走到田野去)-2025年中考语文作文题解读
- 2025至2030年中国室内覆盖施工行业市场发展监测及投资战略咨询报告
- 《知识管理办法》
- 2026年高考数学一轮复习策略《指向深度学习的高中数学教学策略》讲座
评论
0/150
提交评论