南昌航空大学音乐播放器软件课程设计报告_第1页
南昌航空大学音乐播放器软件课程设计报告_第2页
南昌航空大学音乐播放器软件课程设计报告_第3页
南昌航空大学音乐播放器软件课程设计报告_第4页
南昌航空大学音乐播放器软件课程设计报告_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 综合程序 课程设计说明书课程设计名称: 综合程序课程设计 课程设计题目: 音频播放器程序的设计与实现 学 院 名 称: 信息工程学院 专业: 电子信息科学与技术 班级: 120431班 学号: 12043123 姓名: 沈助龙 评分: 教师: 陶秋香 20 15 年 3 月 11 日 综合程序 课程设计任务书20 14 20 15学年 第 2 学期 第 1 周 2周 题目内容及要求利用VC+开发一个支持wav、mp3、wma等不同音频格式的媒体播放器。通过课程设计掌握多媒体编程的基本原理。1) 编程实现一个可支持多种音频格式的媒体播放器,其基本功能包括媒体播放、音量调节、播放进度选择、暂停、

2、停止以及歌曲信息的查询与添加等;2) 给出程序的总体设计和详细设计,要求程序总体架构图、详细设计的流程图,函数、变量说明等3) 给出程序运行、测试的详细结果。进度安排 3月2号查询相关资料 3月4号进行框图设计及程序设计 3月8号程序编写完成 3月9号整体软件完成学生姓名:沈助龙 指导时间 3月2日指导地点: 综合楼中506任务下达2015年3月1 日任务完成2015 年 3 月13 日考核方式1.评阅 2.答辩 3.实际操作 4.其它指导教师陶秋香系(部)主任李灿光注:1、此表一组一表二份,课程设计小组组长一份;任课教师授课时自带一份备查。2、课程设计结束后与“课程设计小结”、“学生成绩单”

3、一并交院教务存档。目录 摘要4 一、设计程序的目的与要求5目的5要求5 二、方案实现与调试5 总体设计5 1、实现功能5 2、功能模块图6 详细设计6 1、界面布局设计6 2、各模块功能设计8 2.1处理“添加文件”按钮8 2.2处理“清空列表”按钮8 2.3处理“播放”按钮9 2.4处理“上一曲”按钮9 2.5处理“下一曲”按钮9 2.6处理“暂停/继续”按钮10 2.7处理“音量”按钮10 3、操作步骤10三、课程设计分析与总结11 分析11 总结11 附录13 关键程序清单13使用说明21 参考文献22摘要音频播放器的设计是利用MFC应用程序、媒体控制接口MIC的基本知识而设计的。MCI

4、简介MCI(Media Control Interface)媒体控制接口是MircroSoft提供的一组多媒体设备和文件的标准接口,它的好处是可以方便地控制绝大多数多媒体设备包括音频、视频、影碟、录像等多媒体设备,而不需要知道它们的内部工作状况。它所支持的媒体格式包括mp3、avi、wav、等等。音频技术发展较早,几年前一些技术已经成熟并产品化,音频技术主要包括四个方面:音频数字化、语音处理、语音合成及语音识别。音频文件包括多种格式的文件,MP3就是其中的一种。MP3的全称是Moving Picture Experts Group,Audio Layer ,它所使用的技术是在VCD(MPEG-

5、1)的音频压缩技术上发展出的第三代,而不是MPEG-3。MP3是一种音频压缩的国际技术标准,它一般需要MP3播放器来读取。关键字:MFC,MCI,音频播放器正文部分一、 课程设计的目的与要求1、目的利用VC+开发一个支持wav、mp3、wma等不同音频格式的媒体播放器。通过课程设计掌握多媒体编程的基本原理。2、任务1. 编程实现一个可支持多种音频格式的媒体播放器,其基本功能包括媒体播放、音量调节、播放进度选择、暂停、停止以及歌曲信息的查询与添加等;2. 给出程序的总体设计和详细设计,要求程序总体架构图、详细设计的流程图,函数、变量说明等3. 给出程序运行、测试的详细结果。二、 方案实现与调试总

6、体设计1 实现功能 音乐播放器主要对常用Windows音频格式的文件实现播放控制:播放歌曲、暂停播放、停止播放、上一曲、下一曲等;文件添加删除控制:添加歌曲,清除列表等;实现音量控制:静音、声音放大以及声音减小的功能。2 功能模块图如图1.1音乐播放器打 开 文 件播 放 歌 曲暂 停 播 放继 续 播 放音 量 控 制图1.1 功能模块图详细设计1 界面布局设计(1) 创建一个对话框类,类名为MyPlayer。(2) 向对话框中添加Group Box控件、Static Text控件、Listbox控件、编辑框控件以及按钮控件。(3) 设置所添加的控件的属性。 系统界面的运行结果图如图1.2所

7、示。图1.2 系统运行界面MyPlayer对话框中所用控件的属性描述如表1-1所示。控件ID描述IDC_STATIC_LISTGroup Box控件,用来显示“歌曲列表”IDC_STATIC_VOLUMEStatic Text控件,用来显示“音量”IDC_STATIC_LISTENINGGroup Box控件,用来显示“正在播放”IDC_BUTTON_OPEN按钮控件,单击它用来添加歌曲IDC_BUTTON_PLAY按钮控件,单击它用来播放歌曲IDC_BUTTON_PRE按钮控件,单击它用来播放上一首歌曲IDC_BUTTON_NEXT按钮控件,单击它用来播放下一首歌曲IDC_BUTTON_PA

8、USEORCONTINUE按钮控件,单击它用来暂停继续歌曲IDC_DELETEALL按钮控件,单击它用来清空列表IDC_VOLUME滚动条控件,拖动它用来设定音量IDC_SLIDERTIME滚动条控件,用来显示进度IDC_LISTListbox控件,用来显示歌曲名IDC_EDIT编辑框控件,用来显示正在播放曲目IDC_EDITTIME1编辑框控件,用来显示正在播放曲目当前位置IDC_EDITTIME2编辑框控件,用来显示正在播放曲目的总时间表1-1 控件属性2 各模块功能设计2.1 添加功能该功能能够在本地磁盘中寻找音乐文件,并将文件加载到程序中,获取音频文件的参数。同时获取文件存取的路径并获

9、取音频文件名,将音频文件名赋值给编辑框同时刷新显示。具体如下:单击“添加歌曲”按钮后,首先对文件类型进行过滤,调用szFile()函数打开对话框选择一个媒体文件,通过Getfiles()函数获取文件路径,通过GetOpenFileName()函数获取文件名后,将文件名字符串赋值给编辑框变量。 2.2 清空列表功能 该功能能够清除掉已经添加的歌曲列表,并确认是否清空。具体如下:单击“清除列表”时通过调用 MessageBox()函数弹出一个对话框并显示确定清空列表吗?字符串,单击确定后通过GetOpenFileName()函数获取文件名后,调用Deleteall()函数删除编辑框里的字符串。2.

10、3 播放功能 本地磁盘音乐文件添加完毕,单击播放按钮开始播放音乐,程序会调用按钮响应函数,递归调用音乐播放函数Onplay()。而此函数是通过是文件参数和音频设备想绑定,从而实现音乐的播放。具体如下:在ReadFile()函数中,通过调用Getfiles()和GetOpenFileName()函数获取刚才选择的文件路径以及文件名,调用该类的play()函数播放歌曲。 2.4 上一曲功能 该功能能够向上选择播放所选歌曲;当所选歌曲不是第一首时可以单击此按钮使得播放上一首歌曲。在函数中,通过if语句if(playnum=0)来判断当前播放的是否是第一首歌曲,如果不是则转到上一首; 2.5下一曲功能

11、 上一首功能一样,即该功能能够向下选择播放所选歌曲;当所选歌曲不是最后一首时可以单击此按钮使得播放下一首歌曲。在函数中,通过if语句if(playnum=num-1)来判断当前播放的是否是最后一首歌曲,如果不是则转到下一首; 2.6 暂停继续功能 当音乐处于播放状态时,单击暂停按钮调用暂停函数,再次单击此按钮实现音乐继续播放。具体如下:在PauseandContinue()函数中,首先通过调用pause()函数暂停正在播放的歌曲,然后调用 GetShortPathName()函数恢复播放歌曲。2.7 音量功能 利用滑块控件调节音量的大小,利用SetRange函数设置滑块滑动的范围,SetCur

12、Volume()得到当前滑块的音量值,SetPos设置初始值,SendMessage()将音量设置到滑块的值,通过滑块可以对音量进行增大或减小以及静音的设置。3操作步骤1) 先在VS环境下建立好一个基于对话框的工程。2) 打开资源视图,在对话框内按照布局图布局,步好后根据表来设置属性。添加相应的变量和函数。3) 为各个按钮添加消息处理函数,并添加相应的代码。4) 全部完成后进行测试和调试。三、 课程设计分析与总结设计分析 按照课程设计的要求,我们用C/C+来实现功能,但由于我们在学过面向对象后,我们常用的是Visual Studio 2010版本的VS编辑器。在分析所要做的播放器时,想到的最基

13、本的功能就是可以播放音乐,其次就是对播放过程中的操作,如:快进或快退、上一曲或下一曲、播放/暂停、音量大小、选择和添加歌曲、播放界面选择等等功能。但是,由于学识有限,歌曲的快进功能没有做出来,其他的功能都差不多按要求实现了。总结本次课程设计中一共做了两个音乐播放器,一个是直接用MFC的ALTIVEX控件做的截图如下图2.1所示(基本功能都能实现,需双击打开文件)图2.1 ALTIVEX控件运行界面另一个就是以上较为复杂的播放器经过两周的面向对象程序课程设计,我学到了很多。在这实际动手学习中,我对VC+这门课程有了更深刻的认识,掌握了用MFC创建基于对话框的应用程序,同时了解了MCI相关知识。这

14、次音乐播放器的设计,主要对常用Windows音频格式的文件实现播放控制:播放歌曲、暂停播放、停止播放、上一曲、下一曲等;实现音量控制:、声音放大以及声音减小的功能。这是我这两周课设的总结!附录 关键程序清单/添加文件void getfiles (HWND hwnd) TCHAR szFile40*MAX_PATH;/打开文件路径和名称 OPENFILENAME ofn; TCHAR szPath256; /歌曲的路径 TCHAR * p; /指向歌曲的名字 int k;ZeroMemory(&ofn,sizeof(ofn); ofn.lStructSize=sizeof(ofn); o

15、fn.hwndOwner=hwnd;ofn.lpstrFilter="音乐文件(mp3、wma、wav)0*.mp3;*.wma;*.wav0所有文件(*.*)0*.*00" ofn.lpstrCustomFilter=NULL;ofn.nFilterIndex=1;ofn.lpstrFile=szFile;ofn.nMaxFile=sizeof(szFile)/sizeof(TCHAR);ofn.lpstrFile0=TEXT('0');ofn.lpstrFileTitle=NULL;ofn.nMaxFileTitle=0;ofn.lpstrTitle=N

16、ULL;ofn.Flags=OFN_HIDEREADONLY|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_EXPLORER|OFN_ALLOWMULTISELECT; ofn.lpstrDefExt="*.mp3" if (GetOpenFileName(&ofn) int nLen = 0; TCHAR xname256;int zk=0; lstrcpyn(szPath, szFile, ofn.nFileOffset ); /把第一个文件名前的路径复制到szPath szPath ofn.nFileOffset = '

17、;0'/文件路径已经取得,当选择一个文件时,此处获得完整的文件路径+文件名 nLen = lstrlen(szPath); /nlen为文件路径的字符长度 if( szPathnLen-1 != '' ) /表示选了多个文件 lstrcat(szPath, TEXT(""); /路径加上/p = szFile + ofn.nFileOffset; /把指针移到第一个文件while( *p ) lstrcpy(szFileName_Pathnum,szPath); lstrcat(szFileName_Pathnum,p); /加上文件名 for (k

18、=0;k<num;k+)if (strcmp(szFileName_Pathnum,szFileName_Pathk)=0)num-;zk+;/如果有重复的,则zk加一,用于下面的判断if (zk=0) /如果zk=0就说明上面的if语句没有执行到,也就是没有重复的wsprintf(xname,"%d.%s",num+1,p); HWND hwndlist=GetDlgItem(hwnd,IDC_LIST);ListBox_InsertString(hwndlist,-1,xname); lstrcat(szFileNamenum,p); /文件名复制给szfilen

19、ame p += lstrlen(p) +1; /移至下一个文件num+; elsezk-;p += lstrlen(p) +1; /移至下一个文件num+;/保存文件void keepfile(HWND hwnd) FILE *file; int i; file=fopen("D:LIST.list","r+"); /打开保存歌曲文件 if(fopen("D:LIST.list","r+")=NULL)file=fopen("D:LIST.list","w+"); fwri

20、te(&num,sizeof(num),1,file); /保存歌曲的数量信息for (i=0;i<num;i+)fwrite(&szFileNamei,sizeof(szFileNamei),1,file); /写入文件名 fwrite(&szFileName_Pathi,sizeof(szFileNamei),1,file);/写入完整路径fclose(file);/读取歌曲void readfile(HWND hwnd)HWND hwndlist=GetDlgItem(hwnd,IDC_LIST);TCHAR xname256;FILE *readfile;

21、int i; readfile=fopen("D:LIST.list","rb"); if (fopen("D:LIST.list","rb")=NULL) MessageBox(hwnd,"读取音乐列表失败!","抱歉",MB_OK); else fread(&num,sizeof(num),1,readfile); /按什么顺序写进去就要按什么顺序读出来 for (i=0;i<num;i+) fread(&szFileNamei,sizeof(szF

22、ileNamei),1,readfile); wsprintf(xname,"%d.%s",i+1,szFileNamei); ListBox_InsertString(hwndlist,-1,xname);fread(&szFileName_Pathi,sizeof(szFileName_Pathi),1,readfile); fclose(readfile); /清空歌曲列表和文件void deleteall(HWND hwnd) int ret= MessageBox(hwnd,TEXT("确定清空列表吗?"),TEXT("提示

23、"),MB_YESNO|MB_ICONQUESTION); if(ret=IDYES) stop(hwnd); FILE* fp = fopen("D:LIST.list","w+");/创建一个用以读写的文件,之前存在的被删掉 fclose(fp); /以上两句清空TXT里的内容 HWND hwndlist=GetDlgItem(hwnd,IDC_LIST);SendMessage(GetDlgItem(hwnd,IDC_LIST),LB_RESETCONTENT,0,0);/清空ListBoxnum=0; ZeroMemory(&s

24、zFileName_Path,sizeof(szFileName_Path);/清空路径ZeroMemory(&szFileName,sizeof(szFileName);/清空文件名MessageBox(hwnd,TEXT("列表已清空!"),TEXT("提示"),MB_OK); void writeInfo(HWND hwnd)/在编辑框显示正在播放的歌曲名char str256;wsprintf(str,"%s",szFileNameplaynum);SetDlgItemText(hwnd,IDC_EDIT,str);/

25、写入/播放void play(HWND hwnd) stop(hwnd); HWND hwndlist=GetDlgItem(hwnd,IDC_LIST); playnum=ListBox_GetCurSel(hwndlist);GetShortPathName(szFileName_Pathplaynum,shortname,sizeof(shortname);wsprintf(zhiling,"play %s",shortname);/字符串相加mciSendString(zhiling,"",0,NULL);/播放writeInfo(hwnd);f

26、lg=1;musiclength(hwnd);/获取歌曲总时间并显示 /暂停/继续void pauseandcontinue(HWND hwnd) GetShortPathName(szFileName_Pathplaynum,shortname,sizeof(shortname);if(0=flg)/当前处于暂停状态,准备恢复播放歌曲wsprintf(zhiling,"resume %s",shortname);/字符串相加 mciSendString(zhiling,"",0,NULL);flg=1;elsewsprintf(zhiling,&quo

27、t;pause %s",shortname);/字符串相加mciSendString(zhiling,"",0,NULL);flg=0;/上一曲void pre(HWND hwnd) stop(hwnd);if(xunhuan=0)if(playnum=0)/如果当前播放的是第一首歌曲则转到最后一首playnum=num-1;else/否则播放上一曲playnum=playnum-1; HWND hwndlist=GetDlgItem(hwnd,IDC_LIST); ListBox_SetCurSel(hwndlist,playnum); play(hwnd);

28、writeInfo(hwnd);srand(time(0); playnum=rand();playnum=playnum%(num+1);char str256;itoa(playnum,str,10);MessageBox(hwnd,str,TEXT(""),NULL);play(hwnd);*/if(xunhuan=1)play(hwnd); /下一曲void next(HWND hwnd) HWND hwndCombo=GetDlgItem(hwnd,IDC_COMBO);xunhuan=ComboBox_GetCurSel(hwndCombo); stop(hwn

29、d);if(xunhuan=0)/循环播放if(playnum=num-1)/如果当前播放的是最后首歌曲则转到第一曲playnum=0;else/否则播放下一曲playnum=playnum+1; HWND hwndlist=GetDlgItem(hwnd,IDC_LIST); ListBox_SetCurSel(hwndlist,playnum); play(hwnd);srand(time(0); /以当前的系统时间为种子 playnum=rand();playnum=playnum%(num+1);play(hwnd);*/if(xunhuan=1)/单曲播放play(hwnd);/获取

30、歌曲的总长度void musiclength (HWND hwnd) TCHAR str256; /定义缓冲区的大 wsprintf(zhiling,"Status %s length",shortname);mciSendString(zhiling,str,sizeof(str),NULL); length=atol(str); /单位毫秒totaltime=length/1000;fen=totaltime/60;miao=totaltime-fen*60;wsprintf(shijian,"%02d:%02d",fen,miao);SetDlgI

31、temText(hwnd,IDC_EDITTIME2,shijian);/写入/获取当前歌曲位置void CALLBACK musicposition (HWND hwnd,UINT message,UINT iTimerID,DWORD dwTime) TCHAR str256; /定义缓冲区的大小 wsprintf(zhiling,"Status %s position",shortname);mciSendString(zhiling,str,sizeof(str),NULL); position=atol(str); /单位毫秒int SetPos(int position);if(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论