1《多媒体技术教程》课程论文题目:基于VC的多媒体播放器的设计与实现学院计算机学院专业班级1102学号14112400645姓名马敏指导老师王勇智日期2013.6.202多媒体播放器的设计摘要本文主要是开发了一款简单的多媒体播放器。可以播放多种格式的音频、视频文件,该播放器实现了的基本功能包括:音频视频文件的打开、添加到菜单、媒体的播放、音量大小的调节、播放时间的拖动、暂停播放、停止以及歌曲的添加等。使之成为一款简易的媒体播放设备,能够完美的播放市面上大多数的音频、视频文件。在毕业设计中,系统开发平台为WindowsXP操作系统,程序设计环境采用VisualC++6.0。在程序设计中,利用了微软公司开发的ActiveX控件——可视动画控件ActiveMovie,程序通过调试运行,初步实现了设计目标,本程序是基于MFC集成开发环境,利用ActiveMovie控件实现媒体播放的功能的,除了基本的播放控制外,还具有多文件快进、快退、全屏播放、静音等实用功能。关键字:多媒体;播放器;Active控件3一.开发工具及其相关理论VisualC++6.0不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrateddevelopmentenvironment,IDE)。VisualC++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。这些组件通过一个名为DeveloperStudio的组件集成为和谐的开发环境【8】。MFC(MicrosoftFoundationClass)是用来编写Windows应用程序的C++类集,其中封装了大部分WindowsAPI函数和Windows控件,使用MFC类库和VisualC++提供的高度可视的应用程序开发工具,可使应用程序开发变得简单,提高代码的可靠性和可重用性。随着多媒体性能的极大提升,程序中经常要播放一段视频或者一段音频,如果能够简单地插入音频和视频,将极大缩短程序的开发时间。本文基于MFC在VisualC++环境下利用WindowsMediaPlayer控件实现了音频视频文件的播放。MFC,微软基础类(MicrosoftFoundationClasses),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是WinDOS下开发人员使用的专业C++SDK(SDK,StandardSoftWareDevelopKit,专业软件开发平台),MFC就是挂在它之上的一个辅助软件开发包,MFC作为与VC++血肉相连的部分(注意C++和VC++的区别:C++是一种程序设计语言,是一种大家都承认的软件编制的通用规范,而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控件来实现。只要精心地设计应用程序的用户界面,我们一样可以开发出功能齐全、外观漂亮、具有相当水准的多媒体播放器。4二.多媒体播放器功能图该播放器分为十个模块,根据ActiveMovie控件实现它们各自相应的功能。打开模块:打开目标文件,如音频、视频文件。关闭模块:关闭播放器。播放模块:播放音频、视频文件,播放列表。暂停模块:暂时停止正在播放的音/视频文件。停止模块:结束当前音/视频文件的播放,但不退出播放器。全频模块:实现文件的全频播放。音量模块:调节音量大小,还有静音。循环模块:实现播放列表中的全部文件的循环播放。快进退模块:调节播放的快进和快退。列表模块:显示歌曲。三.多媒体编写设计过程1.模块实现函数说明这些实现模块功能的具体函数均属于CMediaPlayerDlg类,它是在建立MediaPlayer工程时由MFC建立的一个对话框的类,在该对话框上进行的操作函数即可实现程序所需要的所有功能,其实现函数则是调用ActiveMovie控件的相关函数,从而完成各项具体功能。各个模块的具体实现函数描述见下表所示:模块名称实现函数打开模块voidCVedioplayerDlg::OnOpen()关闭模块voidCVedioplayerDlg::OnClose()播放模块voidCVedioplayerDlg::OnPlay()多媒体播放器打开模块关闭模块播放模块暂停模块停止模块全频模块音量模块循环模块快进退模块列表模块5voidCVedioplayerDlg::OnPlaylist()暂停模块voidCVedioplayerDlg::OnPause()停止模块voidCVedioplayerDlg::OnStop()全屏模块voidCVedioplayerDlg::OnFulscreeen()音量模块voidCVedioplayerDlg::OnLower()voidCVedioplayerDlg::OnUpper()voidCVedioplayerrDlg::OnMute()voidCVedioplayerDlg::OnOnquiet()循环模块voidCVedioplayerDlg::OnRepeat()voidCVedioplayerDlg::OnTimer()快进退模块voidCVedioplayerDlg::OnOnquiet()添加模块voidCVedioplayerDlg::OnList1()2.主要变量声明程序中用到的主要控件有:1个ActiveMovieControl、1个列表框、12个按钮。各个控件变量的声明参见下表2:控件名称变量类型变量名说明IDC_LIST1CListBoxm_Playlist播放列表IDC_ACTIVEMOVIECONTROL1CActiveMovie3m_ActiveMovie可视动画控件IDC_OPENCButtonm_Open打开、添加文件IDC_STOPCButtonm_Stop停止播放IDC_CLOSECButtonm_Close关闭当前播放IDC_LOWERCButtonm_Lower降低音量IDC_PLAYCButtonm_Play循环播放IDC_PAUSECButtonm_Pause暂停IDCANCELCButtonm_Exit退出IDC_UPPERCButtonm_Upper增大音量IDC_FULSCREEENCButtonm_FullScreen全屏6IDC_REPEATCButtonm_Repeat循环控制IDC_ACCELATECButtonm_Accelate快进IDC_QUITCButtonm_Quit快退3.设计多媒体播放器的界面播放器主界面设计如下图所示:(1)打开函数voidCVedioplayerDlg::OnOpen(){charszFileFilter[]=Mp3File(*.mp3)|*.mp3|WmaFile(*.wma)|*.wma|VideoFile(*.dat)|*.dat|WaveFile(*.wav)|*.wav|AVIFile(*.avi)|*.avi|MovieFile(*.mov)|*.mov|7MediaFile(*.mmm)|*.mmm|MidFile(*.mid;*,rmi)|*.mid;*.rmi|MPEGFile(*.mpeg)|*.mpeg|AllFile(*.*)|*.*||;//文件类型过滤CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);POSITIONpos=dlg.GetStartPosition();if(dlg.DoModal()==IDOK){while(pos!=NULL){FileName=dlg.GetNextPathName(pos);m_list.AddString(FileName);}CStringPathName=dlg.GetPathName();PathName.MakeUpper();//这个函数可以将CString字符转化为一个大写的字符串m_ActiveMovie.SetFileName(PathName);}}(2)播放文件的函数:voidCActiveMovie3::Run(){InvokeHelper(0x60020001,DISPATCH_METHOD,VT_EMPTY,NULL,NULL);}(3)暂停播放的函数:voidCActiveMovie3::Pause(){InvokeHelper(0x60020002,DISPATCH_METHOD,VT_EMPTY,NULL,NULL);}(4)停止播放的函数:voidCActiveMovie3::Stop(){InvokeHelper(0x60020003,DISPATCH_METHOD,VT_EMPTY,NULL,NULL);}(5)设置音量模块的函数:voidCVedioplayerDlg::OnLower()//减少音量8{longVolume=m_ActiveMovie.GetVolume();m_ActiveMovie.Pause();m_ActiveMovie.SetVolume(Volume-100);m_ActiveMovie.Run();}voidCVedioplayerDlg::OnUpper()//增加音量{longVolume=m_ActiveMovie.GetVolume();m_ActiveMovie.Pause();m_ActiveMovie.SetVolume(Volume+100);m_ActiveMovie.Run();}voidCVedioplayerDlg::OnOnquiet()//静音{longtemp;Temp=m_ActiveMovie.GetVolume();if(temp-4000){m_ActiveMovie.Pause();m_ActiveMovie.SetVolume(-4000);m_ActiveMovie.Run();}else{m_ActiveMovie.Pause();m_ActiveMovie.SetVolume(temp+4000);m_ActiveMovie.Run();}}(6)快进退模块的函数voidCVedioplayerDlg::OnAccelate()//快进{doubletemp;temp=m_ActiveMovie.GetCurrentPosition();m_ActiveMovie.SetCurrentPosition(temp+10);}9voidCVedioplayerDlg::OnQuit()//快退{doubletemp;temp=m_Ac