《多媒体技术教程》 课程论文
题目:基于VC的多媒体播放器的设计与实现
学 院 计算机学院 专业班级 学 号 姓 名 指导老师 日 期 2013.6.20
1
多媒体播放器的设计
摘要:基于MFC应用程序的数据类型转换软件,个人觉得这个小程序很实用,可
以实现人们对视听的享受,程序主要是根据编码进行统计,这在以后的程序开发中经常要用到。对于我们日常的生活学习有很大的作用。 随着人们对视听效果的不断提高,多媒体技术已经成为计算机领域发展的重要部分。而且,随着编程平台的不断发展,开发多媒体程序不再是一件繁琐、艰难的工作了,无需具备太多的专业知识就可以编写多媒体程序。本案例就介绍用VC6.0自带的一个ActiveX控件----ActiveMovieControl Object,来建立自己的多媒体播放器。本案例将利用Visual C++6.0设计一个可以播放*.mp3,*.wma,*.mdi,*.wav,*.avi,*.dat等文件的媒体播放器。
关键词:程序设计;媒体播放器软件;MFC;按钮控件
一.开发工具及其相关理论
Visual C++6.0 是Microsoft公司在1998年推出的基于Windows 9X和Windows NT的优秀集成开发环境。该环境为用户提供了良好的可视化编程环境,程序员可以里利用该开发环境轻松地访问C++源代码编辑器,资源编辑器和使用内部调试器,并且可以创建项目文件。Visual C++6.0不仅包括编译器,而且它还包括许多有用组件,通过这些组件的协同工作,可以在Visual C++6.0集成环境中轻松地完成创建源文件,编辑资源,以及对程序的编译,连接和调试等各项工作。
MFC(Microsoft Foundation Class)是用来编写Windows应用程序的C++类集,其中封装了大部分WindowsAPI函数和Windows控件,使用MFC类库和Visual C++提供的高度可视的应用程序开发工具,可使应用程序开发变得简单,提高代码的可靠性和可重用性。随着多媒体性能的极大提升,程序中经常要播放一段视频或者一段音频,如果能够简单地插入音频和视频,将极大缩短程序的开发时间。本文基于MFC在Visual C++环境下利用Windows Media Player控件实现了音频视频文件的播放。
MFC,微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是WinDOS下开发人员使用的专业C++ SDK(SDK,Standard SoftWare Develop Kit,专业软件开发平台),MFC就是挂在它之上的一个辅助软件开发包,MFC作为与VC++血肉相连的部分(注意C++和VC++的区别:C++是一种程序设计语言,是一种大家都承认的软件编制的通用规范,而
2
VC++只是一个编译器,或者说是一种编译器+源程序编辑器的IDE,WS,PlatForm,这跟Pascal和Delphi的关系一个道理,Pascal是Delphi的语言基础,Delphi使用Pascal规范来进行Win下应用程序的开发和编译,却不同于Basic语言和VB的关系,Basic语言在VB开发出来被应用的年代已经成了Basic语言的新规范,VB新加的Basic语言要素,如面向对象程序设计的要素,是一种性质上的飞跃,使VB既是一个IDE,又成长成一个新的程序设计语言),MFC同BC++集成的VCL一样是一个非外挂式的软件包,类库,只不过MFC类是微软为VC++专配的。
ActiveX控件是基于COM的可重用组件,主要用于插入ActiveX控件包容器或Web页,ActiveX在外观上和使用上和普通控件一样,还提供属性页以支持在包容器的设计阶段对ActiveX控件的属性进行可视化设计。
ActiveMovie控件是微软公司推出的用于多媒体程序设计的控件,它提供了非常完善的音频和视频媒体文件的回放功能,能支持多种文件格式,从最常见的WAV文件和AVI文件到使用MPEG压缩格式的VCD视频文件,都可以正常的进行播放。控件能根据文件后缀进行自动判别设备类型,并完成相应的控制。因此,若正在编写的应用程序需要提供多媒体支持,那么使用ActiveMovie控件是一个很好的主意。事实上,很多优秀的多媒体应用程序,其内部的多媒体回放就是利用ActiveMovie控件来实现。只要精心地设计应用程序的用户界面,我们一样可以开发出功能齐全、外观漂亮、具有相当水准的多媒体播放器。 二.多媒体播放器功能图
该播放器分为十个模块,根据ActiveMovie控件实现它们各自相应的功能。
多媒体播放器 打开模块 关闭模块 播放模块 暂停模块 停止模块 全频模块 音量模块 循环模块 快进退模块 列表模块
打开模块:打开目标文件,如音频、视频文件。
关闭模块:关闭播放器。
播放模块:播放音频、视频文件,播放列表。 暂停模块:暂时停止正在播放的音/视频文件。
停止模块:结束当前音/视频文件的播放,但不退出播放器。
3
全频模块:实现文件的全频播放。 音量模块:调节音量大小,还有静音。
循环模块:实现播放列表中的全部文件的循环播放。 快进退模块:调节播放的快进和快退。 列表模块:显示歌曲。
三.多媒体编写设计过程 1. 模块实现函数说明
这些实现模块功能的具体函数均属于CMediaPlayerDlg类,它是在建立MediaPlayer工程时由MFC建立的一个对话框的类,在该对话框上进行的操作函数即可实现程序所需要的所有功能,其实现函数则是调用ActiveMovie控件的相关函数,从而完成各项具体功能。各个模块的具体实现函数描述见下表所示:
模块名称 打开模块 关闭模块 播放模块 暂停模块 停止模块 全屏模块 实现函数 void CVedioplayerDlg::OnOpen() void CVedioplayerDlg::OnClose() void CVedioplayerDlg::OnPlay() void CVedioplayerDlg::OnPlaylist() void CVedioplayerDlg::OnPause() void CVedioplayerDlg::OnStop() void CVedioplayerDlg::OnFulscreeen() void CVedioplayerDlg::OnLower() 音量模块 void CVedioplayerDlg::OnUpper() void CVedioplayerrDlg::OnMute() void CVedioplayerDlg::OnOnquiet() void CVedioplayerDlg::OnRepeat() 循环模块 void CVedioplayerDlg::OnTimer() 快进退模块 添加模块 void CVedioplayerDlg::OnOnquiet() void CVedioplayerDlg::OnList1()
4
2. 主要变量声明
程序中用到的主要控件有:1个ActiveMovieControl 、1个列表框、12个按钮。各个控件变量的声明参见下表2:
控件名称 IDC_LIST1 IDC_ACTIVEMOVIECONTROL1 IDC_OPEN IDC_STOP IDC_CLOSE IDC_LOWER IDC_PLAY IDC_PAUSE IDCANCEL IDC_UPPER IDC_FULSCREEEN IDC_REPEAT IDC_ACCELATE IDC_QUIT 变量类型 CListBox 变量名 m_Playlist 说明 播放列表 可视动画控件 打开、添加文件 停止播放 关闭当前播放 降低音量 循环播放 暂停 退出 增大音量 全屏 循环控制 快进 快退 CActiveMovie3 m_ActiveMovie CButton CButton CButton CButton CButton CButton CButton CButton CButton CButton CButton CButton m_Open m_Stop m_Close m_Lower m_Play m_Pause m_Exit m_Upper m_FullScreen m_Repeat m_Accelate m_Quit
3. 设计多媒体播放器的界面
播放器主界面设计如下图所示:
5
(1)打开函数
void CVedioplayerDlg::OnOpen() {
char szFileFilter[]= \"Mp3 File(*.mp3)|*.mp3|\" \"Wma File(*.wma)|*.wma|\" \"Video File(*.dat)|*.dat|\" \"Wave File(*.wav)|*.wav|\" \"AVI File(*.avi)|*.avi|\" \"Movie File(*.mov)|*.mov|\" \"Media File(*.mmm)|*.mmm|\" \"Mid File(*.mid;*,rmi)|*.mid;*.rmi|\" \"MPEG File(*.mpeg)|*.mpeg|\" \"All File(*.*)|*.*||\";//文件类型过滤
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter); POSITION pos=dlg.GetStartPosition(); if(dlg.DoModal()==IDOK){
while(pos!=NULL)
6
}
}
{ }
CString PathName=dlg.GetPathName();
PathName.MakeUpper();//这个函数可以将CString字符转化为一个大写的字符串 m_ActiveMovie.SetFileName(PathName);
FileName=dlg.GetNextPathName(pos); m_list.AddString(FileName);
(2)播放文件的函数:
void CActiveMovie3::Run() { }
InvokeHelper(0x60020001, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
(3)暂停播放的函数:
void CActiveMovie3::Pause() { }
InvokeHelper(0x60020002, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
(4)停止播放的函数:
void CActiveMovie3::Stop() { }
InvokeHelper(0x60020003, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
(5)设置音量模块的函数:
void CVedioplayerDlg::OnLower()//减少音量 {
long Volume=m_ActiveMovie.GetVolume(); m_ActiveMovie.Pause();
m_ActiveMovie.SetVolume(Volume-100); m_ActiveMovie.Run(); }
void CVedioplayerDlg::OnUpper()//增加音量 {
7
long Volume=m_ActiveMovie.GetVolume(); m_ActiveMovie.Pause();
m_ActiveMovie.SetVolume(Volume+100); m_ActiveMovie.Run(); }
void CVedioplayerDlg::OnOnquiet() //静音 {
long temp;
Temp=m_ActiveMovie.GetVolume(); if(temp>-4000) {
} else {
} }
m_ActiveMovie.Pause();
m_ActiveMovie.SetVolume(temp+4000); m_ActiveMovie.Run(); m_ActiveMovie.Pause();
m_ActiveMovie.SetVolume(-4000); m_ActiveMovie.Run();
(6)快进退模块的函数
void CVedioplayerDlg::OnAccelate() //快进 { double temp; temp=m_ActiveMovie.GetCurrentPosition(); m_ActiveMovie.SetCurrentPosition(temp+10); }
void CVedioplayerDlg::OnQuit() //快退
{ double temp; temp=m_ActiveMovie.GetCurrentPosition(); m_ActiveMovie.SetCurrentPosition(temp-10); }
(7)播放列表
void CVedioplayerDlg::OnPlaylist() //列表窗口的显示 {
8
flag=!flag; if(!flag) { SetWindowPos(NULL,0,0,545,450,SWP_NOMOVE); } else { SetWindowPos(NULL,0,0,710,450,SWP_NOMOVE); } }
void CVedioplayerDlg::OnList1() //单击列表选项 { CString str; int index=m_list.GetCurSel(); m_list.GetText(index,str); m_ActiveMovie.SetFileName(str); FileName=str; }
(8)全屏播放
void CVedioplayerDlg::OnFullscreen()//全屏播放 { m_ActiveMovie.Pause(); m_ActiveMovie.SetFullScreenMode(true); m_ActiveMovie.SetMovieWindowSize(SW_SHOWMAXIMIZED); m_ActiveMovie.Run(); }
9
四.程序实现结果
1. 程序运行流程图
该播放器程序运行过程的流程图如下图所示:
开始 添加文件 N Y 播放 播放控制(暂停、循环等) 添加文件 N 退出 Y 退出
2.播放器实现结果演示
(1)程序打开运行后出现如下图所示界面:
10
(2) 单击“打开”按钮,可以在从电脑添加自己喜欢的歌曲或这视频:
(4)在播放列表单击播放即可播放自己喜欢的音乐或视频点击播放即可:
(5) 从另外一个界面打开便是关于自己版权设计界面:
图为“关于”信息
这基本上就是整个程序的运行界面展示,当然还有许多静音,快进,快退等功能只能是用户者亲自使用亲身体会感受了。
11
五.课程心得与总结
通过这次的多媒体播放器的设计,让我们切身的感受到了计算机技术在多媒体中的应用是多么的广泛和实际。同时,这也是理论知识的又一次实践,在这次的设计中利用VC++6.0编写出一个多媒体播放器,在这个过程中让我很有成就感,虽然很多都是在老师的提示下完成的,但是,当一个成品有自己编写出来的时候,那种成就感是可想而知的。在工作和生活中多媒体技术和我们息息相关,在计算机技术不断普及的今天,掌握多媒体技术对我们而言是相当重要的,这也是我们未来学习的重点,通过这次的学习也让我们学会了自学软件的技巧,对于今后的学习也是很有帮助的。
这次课程设计是一个理论与实践结合的过程,让我明白理论知识往往是不够的,只有把所学的理论与实际行动相结合,才会提高自己的综合实际能力和独立思考能力。在设计的过程中我们都会遇到很多的问题,但往往是一个小问题都会导致实验的失败,这就要我们花大量的时间去思索和改正,这是一个很艰辛的过程,但同时也是你收获最大的过程。
实验往往是一个苦中有乐的过程,我希望在以后的实验学习中自己能独立思考,同时也要认真去完成,这样既能学到知识,也能让自己的实践操作得到锻炼。
最后,我要感谢我身边同学,他们帮我学到了很多,同时也付出了很多,通过与他们的讨论我也收获可很多,并且问题总能迎刃而解,也感谢老师的细心指导,让我顺利的完成了课程设计。 我想这就是学习的魅力,带给我们知识还有快乐。
参考文献
[1] 龚进明,戴红芳. 多媒体资源播放器的设计与开发[J]. 常熟高专学报, 2003,(02) .
[2] 刘雅琴,夏玉杰. 基于MFC的多媒体播放器的实现[J]. 信息技术, 2009,(03) . [3] 龚月琴. 多功能媒体播放器的设计与开发[J]. 福建电脑, 2004,(07) . [4] http://baike.baidu.com/view/1729745.html [5] http://baike.baidu.com/view/355.html
12
因篇幅问题不能全部显示,请点此查看更多更全内容