计算机知识Word文件下载.docx
- 文档编号:924506
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:26
- 大小:876.38KB
计算机知识Word文件下载.docx
《计算机知识Word文件下载.docx》由会员分享,可在线阅读,更多相关《计算机知识Word文件下载.docx(26页珍藏版)》请在冰点文库上搜索。
任务书
多媒体播放器程序的设计与实现
目的:
利用VC++开发一个支持mp3、wma、wmv、avi、mpg等不同音频、视频格式的多媒体播放器。
通过课程设计掌握多媒体编程的基本原理。
任务:
1编程实现一个可支持多种音视频格式的多媒体播放器,其基本功能包括媒体播放、音量调节、播放进度选择、暂停、停止以及歌曲信息的查询与添加等。
2给出程序的总体设计和详细设计,要求程序总体架构图、详细设计的流程图,函数、变量说明等。
3给出程序运行、测试的详细结果。
多媒体播放器
∙需求分析
现代电子科学计算机的发展给社会带来很大的变化,人们的生活发生了很大的变化。
家用型电子计算机几乎进了每家每户,满足了人们生活的各种需要,而这更归功与各种各样的计算机软件的出现。
多媒体播放器也是其中非常重要的一员。
多媒体是一种新型的信息处理与传播技术。
它的出现曾经经历过巨大的坎坷,但是却不影响它给整个社会带来深远的影响,有人还认为它是信息及其传输媒介方面的一场根本革命。
自从多媒体技术广泛推广后,人们在网上浏览网页时有了丰富多彩的音乐、影片,在家也能观看电影、电视剧等等。
人们也对新的技术有了更多的渴望、欢迎、认识和远见,计算机多媒体技术的功能在商业、文化娱乐和教育等方面的应用效果明显,前景广阔。
然而多媒体播放器的开发仍然不能满足人们的需求,多媒体文件格式多样,但却没有一款播放器能满足多有格式的解码。
人们渴望解码能力更强大,功能更加完备的多媒体播放器。
本文采用VC++6.0作为开发工具,设计并实现了一个简单的多媒体播放器,支持mp3、wma、wmv、avi、mpg、rmvb等主流音频和视频格式的媒体文件的播放。
同时,本多媒体播放器实现了媒体文件的打开、关闭、播放、暂停、停止、音量、左右声道、播放进度的显示和控制等功能,基本实现了软件工程课程设计的功能点要求。
∙总体设计
∙ActiveMovie控件概述
ActiveMovie控件是微软公司推出的用于多媒体程序设计的可视动画ActiveX控件,由于该控件内嵌了MicrosoftMPEG音频解码器和MicrosoftMPEG视频解码器,能支持多种文件格式,从最常见的WAV文件和AVI文件到使用MPEG压缩格式的VCD视频文件,都可以正常的进行播放。
控件能根据文件后缀进行自动判别设备类型,并完成相应的控制。
因此,若正在编写的应用程序需要提供多媒体支持,那么使用ActiveMovie控件是一个很好的主意。
事实上,很多优秀的多媒体应用程序,其内部的多媒体回放就是利用ActiveMovie控件来实现。
只要精心地设计应用程序的用户界面,我们一样可以开发出功能齐全、外观漂亮、具有相当水准的多媒体播放器。
而且,在Windows95/98和WindowsNT的最新版本中,ActiveMovie控件已作为操作系统的一部分来提供,即使用户系统中没有安装ActiveMovie控件,Microsoft的许可协议也允许在你的应用程序的发行包中发布ActiveMovie的运行时文件。
可视动画控件ActiveMovieControlObject为程序员提供了在该层次上控制媒体设备接口的能力,它包含一组高层次的独立于设备的命令,可以控制音频和视频外设,我们不必关心具体的设备便可以对CD、视盘机、波形音频设备、视频播放设备和MIDI设备等媒体设备进行控制,也可以理解成设备面板上的一排按键,通过选择不同的按键(发送不同的命令)即可让设备完成各种功能,而不必关心设备的内部实现。
因此,程序员本身可以不用关心控件是怎么完成多媒体文件的解码、怎么将解码后的视频信息呈现在播放区上、怎么将解码后的声音信息呈现在扬声器上等等,而仅仅需要调用相应已经封装好的函数(或接口),来完成文件的加载控制、媒体文件的解码控制、媒体文件的播放控制、媒体文件的播放区控制、媒体文件的声音控制、程序的差错控制等等。
本多媒体播放器正是基于ActiveMovie控件的基础进行了软件本身的开发,借助与ActiveMovie本身强大的解码功能,并通过控件对外提供的良好接口来实现多媒体文件的播放和控制。
∙软件的总体架构
控件是现代软件开发过程中必不可少的软件要素,自然有效的使用现成的控件不但可以缩短开发周期,也极大的降低了软件开发人员的工作量。
本多媒体播放正是基于ActiveMovieControlObject控件实现的,当然也包含其他控件(例如菜单、滑块、按钮等等),但是前者是整个播放器的核心控件,由该控件完成了由其他控件加载的多媒体文件的解码,以及完成由其他控件提交的控制信息的响应。
所以软件本身实现了对多个控件的功能的有效整合,通过这样的方式来完成整个多媒体播放器的功能。
软件的总体架构参看下面图2.2。
图2.2
∙开发工具
VisualC++6.0是微软公司推出的开发Win32应用程序(Windows95/98/2000/XP/NT)的、面向对象的可视化集成工具。
它的最大优点就是提供了功能强大的MFC类库,MFC是一个很大的C++类层次结构,其中封装了大量的类及其函数,很多Windows程序所共有的标准内容可以由MFC的类来提供,MFC类为这些内容提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓,这将简化编程工作,大大的减少程序员编写的代码数量,使编程工作变得更加轻松容易。
本程序正是在VC++6.0集成开发环境下开发,使用了功能强大的MFC类库,以及借助了及其方便的可视化开发方法。
∙详细设计
∙类的说明
在按照工作向导,完成一个MFC软件工程的建立之后,VC就自动为我们创建了三个基本的类。
程序中为了完成对音量的大小和左右声道平衡的控制,我又专门为此添加了一个类,并指向音量控制窗口。
下面对程序中用到的类概要说明。
∙classCCTLY2412App:
publicCwinApp
该类由工程向导自动创建,用于维护整个进程,以及完成对进程的控制,在类当中包含一个构造函数CCTLY2412App()(用于创建一个实例)和一个由父类继承的虚函数virtualBOOLInitInstance()(用于初始化一个实例)。
播放器的主要功能实现并不是在该类下,因此并未对该类下的属性和方法进行修改,它仍然保持默认的形式。
∙classCAboutDlg:
publicCdialog
程序的帮助窗口,用于显示程序的帮助信息,本程序中用于显示有关程序的信息,主要是对帮助窗口的显示界面进行了修改,类的主体仍然是保持默认的形式。
∙classCCTLY2412Dlg:
该类是整个程序的重点,维护着主窗口下面的所有变量和函数、以及与主窗口有关的消息和消息响应函数。
该类的声明如下:
classCCTLY2412Dlg:
publicCDialog
{
//Construction
public:
CCTLY2412Dlg(CWnd*pParent=NULL);
//standardconstructor
//DialogData
//{{AFX_DATA(CCTLY2412Dlg)
enum{IDD=IDD_CTLY2412_Dialog};
CActiveMoviem_AMovie;
CRectm_RecInitAMovie;
//保存文件未被加载时,控件的初始大小
CRectm_RecAMovie;
//正在运行的控件的初始大小,用于播放区大小调整时使用
//}}AFX_DATA
//Overrides
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CCTLY2412Dlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
//DDX/DDVsupport
//}}AFX_VIRTUAL
/////////////////////**************/////////////////////
voidInitMoveWindow();
voidMoveMovieWindow();
voidOnReadyStateChangeAmovie(longReadyState);
CActiveMovie*getCActiveMovie();
//Implementation
protected:
HICONm_hIcon;
//Generatedmessagemapfunctions
//{{AFX_MSG(CCTLY2412Dlg)
virtualBOOLOnInitDialog();
afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);
afx_msgvoidOnPaint();
afx_msgHCURSOROnQueryDragIcon();
afx_msgvoidOnStateChangeAmovie(longoldState,longnewState);
afx_msgvoidOnFileOpen();
afx_msgvoidOnFileClose();
afx_msgvoidOnFileExit();
afx_msgvoidOnPlayStart();
afx_msgvoidOnPlayPause();
afx_msgvoidOnPlayStop();
afx_msgvoidOnVideo1x();
afx_msgvoidOnVideo2x();
afx_msgvoidOnVideoFullScreen();
afx_msgvoidOnHelpAbout();
afx_msgvoidOnAudeoVolume();
afx_msgvoidOnCancelMode();
afx_msgvoidOnCaptureChanged(CWnd*pWnd);
afx_msgvoidOnOpenCompleteAmovie();
afx_msgvoidOnClickAmovie();
DECLARE_EVENTSINK_MAP();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
该类下有三个成员变量,如下所示。
CactiveMoviem_Amovie:
该成员变量用于维持主窗口中的由ActiveMovie控件实例化产生的对象,在主窗口运行期间,用户打开的文件的加载到ActiveMovie控件、已加载了文件的ActiveMovie(控件)的播放、暂停、停止、音量控制等等都需要通过该对象的成员函数来完成。
因此该对象非常重要。
在函数说明中还将继续对该对象的成员函数进行说明。
CRectm_RecInitAMovie:
在主窗口创建后,主窗口的用户区还会嵌入ActiveMovie控件的播放区,这个还未加载播放文件的播放区对窗口的调整非常重要,因此专门用此变量存放ActiveMovie控件播放区的矩形区域。
为加载视频文件后的窗口调整和关闭视频文件后的窗口恢复到默认状态下提供参考数据。
这里说明一下,播放器只有在加载视频文件后,才会对播放区进行相应的调整,以使窗口的大小能够适应播放区的大小,在再打开视频文件后会重新对窗口大小进行调整,在关闭视频文件后,窗口会恢复到默认的窗口大小,而音频文件的播放正是在默认窗口大小下。
而m_RecInitAMovie中的数据正是恢复初始化窗口大小所需要的。
CRectm_RecAMovie:
播放器设置了调整播放区的功能,而由于ActiveMovie控件的特性,在我们对播放区进行调整的时候后必须保存原始播放区的大小,因此需要在设置一个这样的成员变量。
∙classCCVolumeDlg:
该类是后面添加的。
播放器设计的时候将声音进行单独的控制,声音的调节通过弹出的“声音调节器”来完成。
因此该类的设计就是为了维护“声音交接器”,来完成声音音量的调节,声音左右声道的调节,以及音量大小和左右声道值的实时显示等。
classCCVolumeDlg:
CCVolumeDlg(CWnd*pParent=NULL);
//{{AFX_DATA(CCVolumeDlg)
enum{IDD=IDD_DIALOG_Volume};
CActiveMovie*m_pAMovie;
CSliderCtrlm_Volume1;
CSliderCtrlm_Volume2;
BOOLOnInitDialog();
//初始化滑块
voidSetCActiveMovie(CActiveMovie*);
//传入CactiveMovie实例对象的地址
//{{AFX_VIRTUAL(CCVolumeDlg)
//{{AFX_MSG(CCVolumeDlg)
afx_msgvoidOnHScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar);
类中有三个添加的成员变量,如下所示。
CActiveMovie*m_pAMovie:
要完成对声音的控制,就要完成对主窗口中ActiveMovie控件进行控制,我们需要调用ActiveMovie对象的成员函数,因此在创建CCVolumeDlg实例对象的时候,需要从主窗口中传入ActiveMovie控件的实例对象到CactiveMovie实例对象中,而m_pAMovie指针就指向这个调节音量、得到音量需要用的到的ActiveMovie控件的实例对象地址。
∙全局变量
∙CCTLY2412ApptheApp
播放器有一个默认的全局变量CCTLY2412ApptheApp,用于维持程序实例化后的进程对象,但是程序中添加的类和函数都未对该成员变量进行任何的操作,因此这里不进行详细的说明。
∙主要函数说明及其函数流程图
∙classCaboutDlg成员函数
∙BOOLCCTLY2412Dlg:
:
OnInitDialog()
该函数是类在初始化时必须要调用的函数,主要完成一些初始化工作,主要流程都是类在添加的时候自动填入的。
但是这里需要补充的是,在该函数中添加了一些自定义的初始化操作。
如下面所示,操作说明在注释中已经给出。
//设置ActiveMovie控件的初始文件为空
m_AMovie.SetFileName("
"
);
m_AMovie.GetWindowRect(m_RecInitAMovie);
//得到ActiveMovie控件的大小
//文件未被加载时,窗口的大小
InitMoveWindow();
//主窗口初始化
CenterWindow(CWnd:
GetDesktopWindow());
//将窗口置于屏幕中央
∙voidCCTLY2412Dlg:
InitMoveWindow()
完成主窗口的初始化工作,在初始化中将主窗口显示设置成默认的显示状态,或者将主窗口恢复到默认的显示状态。
函数代码如下所示:
voidCCTLY2412Dlg:
InitMoveWindow(){
CRectrct,rctclnt;
GetWindowRect(rct);
//获取窗口大小
GetClientRect(rctclnt);
//获取内容大小
MoveWindow(rct.left,rct.top,m_RecInitAMovie.Width()+(rct.Width()-rctclnt.Width())/2,m_RecInitAMovie.Height()+rct.Height()-rctclnt.Height());
//控件的位置、大小调整
m_AMovie.MoveWindow(0,0,m_RecInitAMovie.Width(),m_RecInitAMovie.Height());
}
MoveMovieWindow()
函数完成主窗口的调整,当用户加载了媒体文件后,需要对用户区窗口进行调整,若为音频文件则恢复到默认显示状态,若为视频文件,则根据视频的播放区大小调整窗口大小。
MoveMovieWindow(){
if(0==m_AMovie.GetImageSourceWidth()||0==m_AMovie.GetImageSourceHeight())
InitMoveWindow();
else
{
CRectrcDlgWnd,rcDlgClnt;
GetWindowRect(rcDlgWnd);
//获得对话框的大小
GetClientRect(rcDlgClnt);
//获得对话框客户区的大小
MoveWindow(rcDlgWnd.left,rcDlgWnd.top,(rcDlgWnd.Width()-rcDlgClnt.Width())/2+m_AMovie.GetImageSourceWidth(),
rcDlgWnd.Height()-rcDlgClnt.Height()+m_AMovie.GetImageSourceHeight()+m_RecInitAMovie.Height());
}
函数流程如下图3.3.1-1所示:
图3.3.1-1voidCCTLY2412Dlg:
MoveMovieWindow()的流程图
OnFileOpen()
该函数为主窗口下的菜单栏“文件|打开”的消息响应函数,完成文件的打开操作,包括文件类型过滤,成功打开的文件加载到ActiveMovie控件对象中,窗口恢复默认大小的操作。
OnFileOpen(){
//TODO:
Addyourcommandhandlercodehere
//文件类型过滤
charszFileFilter[]=
"
AllFile(*.*)|*.*|"
Mp3File(*.mp3)|*.mp3|"
WmaFile(*.wma)|*.wma|"
WaveFile(*.wav)|*.wav|"
AVIFile(*.avi)|*.avi|"
MovieFile(*.mov)|*.mov|"
MediaFile(*.mmm)|*.mmm|"
MidFile(*.mid;
*,rmi)|*.mid;
*.rmi|"
MPEGFile(*.mpeg)|*.mpeg||"
;
CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);
if(dlg.DoModal()==IDOK)
if("
!
=m_AMovie.GetFileName())
{
m_AMovie.SetCurrentPosition(0);
KillTimer(0);
//关掉定时器
}
CStringPathName=dlg.GetPathName();
PathName.MakeUpper();
m_AMovie.SetFileName(PathName);
//打开文件完毕后初始化窗口,等待文件加载结束
函数流程如下图3.3.1-2所示:
图3.3.1-2voidCCTLY2412Dlg:
OnFileOpen()流程图
OnOpenCompleteAmovie()
Amovie控件加载媒体文件完毕后响应的函数,函数要重绘窗口(设置窗口区的大小、居中等),将Amovie控件的播放区大小设置为正常大小。
OnOpenCompleteAmovie(){
Addyourcontrolnotificationhandlercodehere
MoveM
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 知识