音频播放器程序的设计与实现.docx
- 文档编号:655050
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:21
- 大小:33.92KB
音频播放器程序的设计与实现.docx
《音频播放器程序的设计与实现.docx》由会员分享,可在线阅读,更多相关《音频播放器程序的设计与实现.docx(21页珍藏版)》请在冰点文库上搜索。
课程设计说明书
课程设计名称:
软件综合课程设计
课程设计题目:
音频播放器程序的设计与实现
学院名称:
信息工程学院
专业:
电子信息工程 班级:
110414班
学号:
11041424 姓名:
刘日华
评分:
教师:
刘洪武
2014 年2 月22 日
电子信息工程专业 课程设计任务书
2013-2014学年第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.其它□
指导教师
刘洪武
系(部)主任
孙成立
正文:
目录
引言 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
总结 11
附录 13
关键程序清单 13
参考文献 20
引言
MP3播放器的设计是利用MFC应用程序、媒体控制接口MIC
的基本知识而设计的。
1.1MFC简介
MFC是Visual C++是核心。
MFC类库将所有图形用户界面的元素如窗口、菜单和按钮等都以类的形式进行了封装,MFC
AppWizard向导根据继承性利用MFC派生出自己的类,并对
Windows应用程序进行了分解,利用MFC派生类对应用程序重新进行组装,同时还规定了应用程序中各个MFC派生类对象之间的相互联系,实现了标准Windows应用程序的功能,这就是向导生成的所谓MFC应用程序框架。
每个MFC类都包括了一些函数,函数放到类中,符合C++编程方法。
这些函数,必须通过类定义对象才
能使用[1]。
1.2MCI简介
MCI(MediaControlInterface)媒体控制接口是MircroSoft提供的一组多媒体设备和文件的标准接口,它的好处是可以方便地控制绝大多数多媒体设备包括音频、视频、影碟、录像等多媒体设备,而不需要知道它们的内部工作状况。
它所支持的媒体格式包括
mp3、avi、wav、mpeg等等[2]。
音频技术发展较早,几年前一些技术已经成熟并产品化,音频技术主要包括四个方面:
音频数字化、语音处理、语音合成及语音识别。
音频文件包括多种格式的文件,MP3就是其中的一种。
MP3的全称是MovingPictureExpertsGroup,AudioLayerⅢ,它所使用的技术是在VCD(MPEG-1)的音频压缩技术上发展出的第三代,而不是MPEG-3。
MP3是一种音频压缩的国际技术标准,它一般需要
MP3播放器来读取。
一、课程设计的目的与要求
1、目的
利用VC++开发一个支持wav、mp3、wma等不同音频格式的媒体播放器。
通过课程设计掌握多媒体编程的基本原理。
2、任务
1)编程实现一个可支持多种音频格式的媒体播放器,其
基本功能包括媒体播放、音量调节、播放进度选择、暂
停、停止以及歌曲信息的查询与添加等;
2)给出程序的总体设计和详细设计,要求程序总体架构图、详细设计的流程图,函数、变量说明等
3)给出程序运行、测试的详细结果。
二、方案实现与调试
总体设计
1实现功能
MP3播放器主要对常用Windows音频格式的文件实现播放控制:
播放歌曲、暂停播放、停止播放等;实现音量控制:
静音、声音放大以及声音减小的功能。
2功能模块图
播放歌曲
暂停播放
停止播放
音量控制
打开文件
MP3播放器
图-1系统功能模块图
1界面布局设计
详细设计
(1)创建一个对话框类,类名为Mp3PlayerDlg。
(2)向对话框中添加GroupBox控件、StaticText控件以及按钮控件。
(3)设置所添加的控件的属性。
系统界面的运行结果图如图-2所示。
图-2系统界面运行结果图
Mp3Player对话框中所用控件的属性描述如表-1所示。
表-1对话框控件ID及其描述
控件ID 描述
IDC_STATIC_INFO_WND GroupBox控件,用来显示“信息窗口”
IDC_STATIC_INFO StaticText控件,用来显示各种信息
IDC_STATIC_OPERATION GroupBox控件,用来显示“操作面板”
IDC_BUTTON_OPEN 按钮控件,单击它用来选择歌曲
IDC_BUTTON_PLAY 按钮控件,单击它用来播放歌曲
IDC_BUTTON_PAUSE 按钮控件,单击它用来暂停播放歌曲
IDC_BUTTON_STOP 按钮控件,单击它用来停止播放歌曲
IDC_BUTTON_VOLUME 按钮控件,单击它用来设定音量
IDC_BUTTON_QUIT 按钮控件,单击它用来退出程序
2各模块功能设计
2.1处理“打开”按钮
单击“打开”按钮后,在OnButtonOpen()函数中,首先对文件类型进行过滤,调用DoModa()函数打开对话框选择一个媒体文件,通过GetPathName()函数获取文件路径,通过GetFileName()函数获取文件名后,调用DisplayInfo()函数在Static Text控件上显示“你选择的歌曲是(文件名)”,然后利用GetDlgItem()函数设置“暂停”按钮以及“停止”按钮不可用。
2.2处理“播放”按钮
单击“播放”按钮后,在OnButtonPlay()函数中,通过调用
MCIMP3类的MCIOpen()函数获取刚才选择的文件路径以及文件名,调用该类的MCIPlay()函数播放歌曲,此时调用DisplayInfo()函数在Static Text控件上显示“正在播放的歌曲是(文件名)”,进行歌曲的播放,然后利用GetDlgItem()函数设置“播放”按钮不可用。
2.3处理“暂停”按钮
单击“暂停”按钮后,在OnButtonPause()函数中,首先通过调用MCIMP3类的MCIPause()函数暂停正在播放的歌曲,然后调用
DisplayInfo()函数在StaticText控件上显示“暂停播放歌曲(文件名)
”,此时的歌曲处于暂停时的进度上,利用GetDlgItem()函数设置
“播放”按钮可用。
2.4处理“停止”按钮
单击“停止”按钮后,在OnButtonStop()函数中,首先通过调用MCIMP3类的MCIPause()函数停止正在播放的歌曲,然后调用
DisplayInfo()函数在StaticText控件上显示“停止播放歌曲(文件名)”,将停止正在播放歌曲,利用GetDlgItem()函数设置“暂停”按钮和“停止”按钮不可用。
2.5处理“音量”按钮
单击“音量”按钮后,在OnButtonVolume()函数中,首先调用
WinExec()函数并且打开C:
/WINDOWS/System32/sndvol32.exe,弹出“主音量”对话框,在此对话框内可以对音量进行增大或减小以及静音的设置。
2.6处理“退出”按钮
单击“退出”按钮后,在OnButtonQuit()函数中,调用CDialog
类的OnCancel()函数将退出对话框,结束程序的运行。
3操作步骤
1)先在VS环境下建立好一个基于对话框的工程。
2)打开资源视图,在对话框内按照布局图布局,步好后根据表-1来设置属性。
添加相应的变量和函数。
3)进行程序初始化。
4)为各个按钮添加消息处理函数,并添加相应的代码。
5)全部完成后进行测试和调试。
三、课程设计分析与总结
分析
按照课程设计的要求,我们用C/C++来实现功能,但由于我们在学过面向对象后,我们常用的是VisualStudio2010版本的VS编辑器。
在分析所要做的播放器时,想到的最基本的功能就是可以播放音乐,其次就是对播放过程中的操作,如:
快进或快退、上一曲或下一曲、播放/暂停、音量大小、选择和添加歌曲、播放界面选择……等等功能。
但是,由于学识有限,我们在这一周的时间内没有去考虑这么多功能,所以对于这样一个播放器,还是存在很多的改进方案。
那么只有在以后的探索中慢慢来实现了。
总结
经过一周的面向对象程序课程设计,我学到了很多。
在这一周的实际动手学习中,我对VC++这门课程有了更深刻的认识,掌握了用MFC创建基于对话框的应用程序,同时了解了MCI相关知识。
这次课程设计我做了MP3播放器的设计,MP3播放器主要对常用
Windows音频格式的文件实现播放控制:
播放歌曲、暂停播放、停止播放等;实现音量控制:
静音、声音放大以及声音减小的功能。
本次课程设计中虽然可以实现播放、暂停、停止、播放界面美
化以及音量等功能,但仍然存在着放多不足,比如进度条功能没有实现、列表管理的功能以及循环播放功能始终无法实现,如果有时间一定会好好研究。
课设是辛苦劳累的,但是收获同样是巨大的,在课设中每解决一个问题,那种成就感是无法言语的,课设中第一次调试程序时出现了很多错误,其中有逻辑错误,编译能通过,运行始终无法通过,后来经过思考,进行了多次修改调试之后得到了运行结果;但是还是存在兼容性问题,电脑版本和系统以及软件的版本之间存在各种兼容性问题,因为之前在程序中几乎没见到过,所以一时不知从何处检查并改进,后来在老师的帮助下,找到了问题,结果换了台电脑,经过改正调试最终达到了目的。
像此类的问题还有很多,不过经过查询资料,咨询老师,与同学探讨最终得到了理想的程序。
此外,我还得到了一个结论,在课程设计中,老师的作用有时是不可或缺的,可以在关键时刻给我们一些重要的提示,从而方便我们解决各种问题。
这就是我对这次软件课程设计的总结。
附录
关键程序清单
BOOLCMp3PlayerDlg:
:
OnInitDialog() //初始化
{
CDialog:
:
OnInitDialog();
//Add"About..."menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);if(pSysMenu!
=NULL)
{
CStringstrAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if(!
strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX,
strAboutMenu);
}
}
//Settheiconforthisdialog. Theframeworkdoesthisautomatically
// whentheapplication'smainwindowisnotadialogSetIcon(m_hIcon,TRUE); //SetbigiconSetIcon(m_hIcon,FALSE); //Setsmallicon
//TODO:
Addextrainitializationhere
DisplayInfo(0,_T("欢迎使用Mp3Player!
"),_T(""));GetDlgItem(IDC_BUTTON_PLAY)->EnableWindow(FALSE);GetDlgItem(IDC_BUTTON_PAUSE)->EnableWindow(FALSE);GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(FALSE);
returnTRUE; //returnTRUE unlessyousetthefocustoacontrol
}
voidCMp3PlayerDlg:
:
OnButtonOpen() //打开
{
//TODO:
AddyourcontrolnotificationhandlercodeherecharszFileFilter[]="AllMusicFiles(*.*)|*.*||";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)
{
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);
}
}
voidCMp3PlayerDlg:
:
OnButtonPlay() //播放
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(m_bIsPauseOpen)
{
if(m_bIsNoSelectFile)
{
}
else
{
m_mcimp3.MCIResume();
DisplayInfo(1,_T("继续播放歌曲:
"),m_csSongName);m_bIsPressPauseBtn=FALSE;
m_mcimp3.MCIOpen(m_csPathName);m_mcimp3.MCIPlay();
DisplayInfo(1,_T("正在播放的歌曲是:
"),m_csSongName);
GetDlgItem(IDC_BUTTON_PLAY)->EnableWindow(FALSE);m_bIsNoSelectFile=TRUE;
}
}
elseif(m_bIsOpened&&m_bIsPressPauseBtn)
{
}
else
{
m_mcimp3.MCIPlay();
DisplayInfo(1,_T("继续播放歌曲:
"),m_csSongName);m_bIsPressPauseBtn=FALSE;GetDlgItem(IDC_BUTTON_PLAY)->EnableWindow(FALSE);
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 = 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);
}
}
voidCMp3PlayerDlg:
:
OnButtonPause() //暂停
{
//TODO:
AddyourcontrolnotificationhandlercodehereBOOLbIsPlaying=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);
}
}
voidCMp3PlayerDlg:
:
OnButtonStop() //停止
{
//TODO:
Addyourcontrolnotificationhandlercodehereif(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);
}
}
voidCMp3PlayerDlg:
:
OnButtonQuit() //退出
{
//TODO:
AddyourcontrolnotificationhandlercodehereCDialog:
:
OnCancel();
}
voidCMp3PlayerDlg:
:
OnButtonVolume() //音量
{
//TODO:
Addyourcontrolnotificationhandlercodehere
WinExec("C:
\\WINDOWS\\System32\\sndvol32.exe",SW_NORMAL);
}
void CMp3PlayerDlg:
:
DisplayInfo(bool bOPInfo,CString csInfo,CStringcsSongName)
{
if(!
bOPInfo)
{
}
else
{
}
}
m_csInfo=csInfo;
m_csInfo=csInfo;m_csInfo+=csSongName;
GetDlgItem(IDC_STATIC_INFO)->SetWindowText(m_csInfo);
voidCMp3PlayerDlg:
:
OnTimer(UINTnIDEvent)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefaultif(nIDEvent==1)
{
if(0==m_dwLen)
{
KillTimer
(1);
DisplayInfo(1,_T("已经播放完歌曲:
"),
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 音频 播放 程序 设计 实现