多媒体与网络编程实验报告.docx
《多媒体与网络编程实验报告.docx》由会员分享,可在线阅读,更多相关《多媒体与网络编程实验报告.docx(29页珍藏版)》请在冰豆网上搜索。
多媒体与网络编程实验报告
实验10多媒体与网络编程
【测试题1】
编写代码实现制作一个音频文件播放器。
只需要实现如图所示的简单界面,点击打开弹出对话框,打开一个.wav的波形音频文件,点击“播放”按钮开始播放,点击“停止”按钮则停止播放,按“关机”按钮则退出应用程序。
需求分析:
1,项目背景和原因。
波形音频是一种电子数字化的声音,是计算机播放音频的一种重要格式,它存储的是声音的波形信息,当播放波形音频时,不管播放文件的设备是何种类型,都会得到相似的声音,波形音频文件通常wav作为文件扩展名。
由于采用波形音频存储电子化声音需要大量的存储空间,因此它一般只用于短时间的声音播放。
通过设计一个简单的波形音频播放器,了解MFC,了解接口类MCI。
2,波形音频播放器的功能
播放器有“打开”,“播放”,“停止”,“关机”三个按钮,同时有一个状态栏,用于显示播放器当前处于的状态。
“打开”按钮用于打开一个波形音频文件;
“播放”用于播放选中的波形音频文件;
“停止”用于暂停正在播放的音频文件,再次点击“播放”时会从暂停出继续播放;
“关机”用于退出播放器。
播放器界面如图所示:
3,数据字典
类向导ClassWizard
静态文本StaticText
按钮CommandButton
4,功能列表
“打开”-------------------voidCWaverDlg:
:
OnOpen()
“播放”-------------------voidCWaverDlg:
:
OnPlay()
“停止”-------------------voidCWaverDlg:
:
OnStop()
“关机”-------------------voidCWaverDlg:
:
OnExit()
5,具体实现步骤
1、首先在VisualC++平台上,选择File->New,新建一个名为WaveAudio.h的头文件。
代码如下:
#if!
defined(WAVE_H_INCLUDED_)
#defineWAVE_H_INCLUDED_
#include"mmsystem.h"
classCWave
{
public:
BOOLm_bPlaying;
BOOLm_bOpen;
WORDm_wDeviceID;
public:
CWave();
virtual~CWave();
DWORDOpen(CStringstrFileName);
//DWORDClose();
DWORDPlay();
voidStop();
DWORDClose();
};
#endif
2、接下来再新建WaveAudio.cpp文件。
代码如下:
#include"mmsystem.h"
#include"stdafx.h"
#include"afxwin.h"
#include"WaveAudio.h"
CWave:
:
CWave()
{
m_bPlaying=FALSE;
m_bOpen=FALSE;
m_wDeviceID=NULL;
}
CWave:
:
~CWave()
{
Close();
}
DWORDCWave:
:
Open(CStringstrFileName)
{
if(m_bOpen)
Close();
DWORDdwOpenFlag;
MCI_OPEN_PARMSmciOpenParam;
mciOpenParam.lpstrDeviceType="WaveAudio";
mciOpenParam.lpstrElementName=strFileName;
dwOpenFlag=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT|MCI_OPEN_TYPE,(DWORD)(LPVOID)&mciOpenParam);
if(dwOpenFlag)
returndwOpenFlag;
m_wDeviceID=mciOpenParam.wDeviceID;
m_bOpen=TRUE;
dwOpenFlag=0;
MCI_SET_PARMSmciSetParam;
mciSetParam.dwTimeFormat=MCI_FORMAT_MILLISECONDS;
dwOpenFlag=mciSendCommand(m_wDeviceID,MCI_SET,MCI_SET_TIME_FORMAT,(DWORD)(LPVOID)&mciSetParam);
if(dwOpenFlag)
returndwOpenFlag;
return0;
}
DWORDCWave:
:
Play()
{
MCI_PLAY_PARMSmciPlayParam;
DWORDdwPlayFlag;
dwPlayFlag=mciSendCommand(m_wDeviceID,MCI_PLAY,NULL,(DWORD)(LPVOID)&mciPlayParam);
if(dwPlayFlag)
returndwPlayFlag;
else{
m_bPlaying=TRUE;
return0;
}
}
voidCWave:
:
Stop()
{
mciSendCommand(m_wDeviceID,MCI_STOP,NULL,NULL);
}
DWORDCWave:
:
Close()
{
if(m_wDeviceID)
{
DWORDdwCloseFlag;
mciSendCommand(m_wDeviceID,MCI_STOP,MCI_WAIT,NULL);
dwCloseFlag=mciSendCommand(m_wDeviceID,MCI_CLOSE,NULL,NULL);
if(dwCloseFlag)
{
AfxMessageBox("关闭时出错");
returndwCloseFlag;
}
}
m_bOpen=FALSE;
m_bPlaying=FALSE;
m_wDeviceID=NULL;
return0;
}
3、新建一个基于对话框类的工程,取名为Waver。
在工作区FileView中右键单击Waver,选择“添加到工程”为工程添加WaveAudio.cpp
和WaveAudio.h文件。
然后在“工程”->“设置”的“连接”中为工程添加winmm.lib。
这之后,需要在文件WaverDlg.h的头部添加#include“WaveAudio.h”。
最后在CwaverDlg类中添加成员变量:
protect:
CWavem_Wave;
CStringm_strFileName;
4、按照要求设计对话框(IDD_WAVER_DIALOG)的界面。
要求:
“打开”—按钮—IDC_OPEN
“播放”—按钮—IDC_PLAY
“停止”—按钮—IDC_STOP
“关机”—按钮—IDC_EXIT
“状态”—静态文本—IDC_STATIC
编辑框—IDC_STATUS
5、用类向导为对话框添加控件变量
IDC_OPENm_btOpen
IDC_PLAYm_btnPlay
IDC_STATUSm_strStatus
6、用类向导为各个函数添加代码
voidCWaverDlg:
:
OnPlay()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(m_Wave.Play())
AfxMessageBox("播放出错");
m_Wave.m_bPlaying=TRUE;
m_strStatus="正在播放……";
UpdateData(FALSE);
}
voidCWaverDlg:
:
OnOpen()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CStringFilter;
charbuf[128];
DWORDdwFlag;
Filter="波形音频文件(*.WAV)|*.WAV||";
CFileDialogfileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,Filter);
if(fileDlg.DoModal()==IDOK)
{
m_strFileName=fileDlg.GetPathName();
dwFlag=m_Wave.Open(m_strFileName);
if(dwFlag)
{
mciGetErrorString(dwFlag,buf,strlen(buf));
AfxMessageBox(buf);
}
m_btnPlay.EnableWindow(TRUE);
m_strStatus=m_strFileName+"文件已经正确打开.";
UpdateData(FALSE);
}
}
voidCWaverDlg:
:
OnStop()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_btnPlay.EnableWindow(TRUE);
m_btnOpen.EnableWindow(TRUE);
if(m_Wave.m_bPlaying)
m_strStatus="播放停止……";
UpdateData(FALSE);
m_Wave.Stop();
}
voidCWaverDlg:
:
OnExit()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
OnCancel();
}
6、运行结果
【测试题2】
BMP位图显示程序,如下图所示,用一个简单的SDI工程实现单击“文件”->“打开”,选择一个.bmp文件,如果不是真正的BMP文件,或者不是真彩色的BMP文件,程序都将报告有关信息。
如果用户选择的是真彩色的BMP文件,则程序会在客户区显示整个图像。
需求分析:
1,项目背景和原因。
通过编写图片浏览器进一步加深对VC++编程的理解
2,视频播放器的功能
界面上有“选择图片”、“改变图片大小”两个按钮。
“选择图片”用于打开一个图片文件,文件格式不限;
“改变图片大小”用于扩大或缩小图片。
3功能列表
“打开图片”----------OnFileopen()
“改变图片大小”---------OnVideo1x()、OnVideo2x()
4,具体实现步骤
1、建立工程,,工程名为Image。
2、设计界面按钮
3、功能列表
“打开”
voidCCTLY2412Dlg:
:
OnFileopen()
{
//TODO:
Addyourcommandhandlercodehere
charszFileFilter[]=
"Mp4File(*.mp4)|*.mp4|"
"Mp3File(*.mp3)|*.mp3|"
"WmaFile(*.wma)|*.wma|"
"VideoFile(*.dat)|*.dat|"
"WaveFile(*.wav)|*.wav|"
"AVIFile(*.avi)|*.avi|"
"MovieFile(*.mov)|*.mov|"
"MediaFile(*.mmm)|*.mmm|"
"MidFile(*.mid;*,rmi)|*.mid;*.rmi|"
"MPEGFile(*.mpeg)|*.mpeg|"
"AllFile(*.*)|*.*||";
CFileDialogFileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);
if(FileDlg.DoModal()==IDOK)
{
CStringPathName=FileDlg.GetPathName();
PathName.MakeUpper();
m_AMovie.SetFileName(PathName);
}
}
放大图片
voidCCTLY2412Dlg:
:
OnVideo1x()
{
//TODO:
Addyourcommandhandlercodehere
m_AMovie.Pause();
m_AMovie.SetMovieWindowSize
(1);
m_AMovie.Run();
}
缩小图片
voidCCTLY2412Dlg:
:
OnVideo2x()
{
//TODO:
Addyourcommandhandlercodehere
m_AMovie.Pause();
m_AMovie.SetMovieWindowSize
(2);
m_AMovie.Run();
}
5,运行结果
【测试题3】
编写一个AVI视频播放器程序,能够播放AVI视频文件。
“文件”->“打开”菜单项,选择一个AVI文件,则程序在客户区的左上角创建一个MCIWnd窗口,并且窗口中已该AVI文件的首幅画面。
按下MCIWnd窗口控制条中的“播放”按钮就开始播放该AVI文件。
需求分析:
1,项目背景和原因。
目前有很多视频播放器,例如暴风影音、迅雷看看等,这些软件都可以很方便的播放各种格式的视频文件。
通过自行设计一个建简易播放器,使初学者了解用vc编写视频播放器的方法。
2,视频播放器的功能
编写一个简单的播放器,此播放器应具有播放至少AVI格式的功能。
播放器中有“文件”、“播放”、“视频”、“音频”、“静音”、“消除静音”和“帮助”七个按钮。
“文件”按钮下又有“打开”、“关闭”、“退出”三个按钮,其中“打开”用于打开一个视频文件;“关闭”用于关闭当前的视频;“退出”用于退出播放器。
“播放”按钮下有“开始”、“暂停”、“停止”,其中“开始”用于开始播放当前视频;“暂停”用于暂停正在播放的视频,当点击“开始”时从暂停的地方继续播放;“停止”用于停止正在播放的视频,当点击“开始”时又从开头播放。
“视频”下又有“原始大小”、“放大2倍”、“缩小2倍”按钮。
点击“原始大小”时,播放器窗口大小不变;点击“放大2倍”时,播放器窗口放大为原来的两倍;点击“缩小2倍”时,播放器窗口缩小为原来的一半。
“音频”下有“调节音量”、“调节左右声道平衡”。
“调节音量”下又有“增加”和“减小”两个按钮,分别用于增加音量和减小音量;
而“调节左右声道平衡”在此播放器中并没有实际功能,若要实现调节左右声道平衡的功能要添加相应的代码,此时此刻我们的目的是要实现一些简单功能就可以了,所以不必理会“调节左右声道平衡”。
“帮助”按钮下还有个“关于播放器”的按钮,由于并没有给其编写相应的代码,也没有实际功能。
窗口如下:
3,数据字典
类向导ClassWizard
4,功能列表
播放器中所有的功能及其代码如下(所有的函数定义在类CCTLY2412Dlg中):
“打开”-----------------OnFileopen()
“关闭”-------------------OnFileclose()
“退出”-----------------OnFileexit()
“开始”-----------------OnPlaystart()
“暂停”-----------------OnPlaypause()
“停止”-----------------OnPlaystop()
“原始大小”------------OnVideo1x()
“放大2倍”-----------OnYi()
“缩小2倍”-----------OnVideo2x()
“增加”------------------OnAdd()
“减小”------------------OnDown()
“静音”------------------OnQiuet()
“消除静音”------------OnHuifu()
5,具体实现步骤
首先:
注册该控件在windows“运行”里写入:
regsvr32msdrm.ocx单击确定。
1、建立基于对话框的工程,工程名为CTLY2412。
2、删除IDD_PLAYER_DIALOG对话框中的一个OK按钮、一个Cancel按钮和一个文本框,在对话框中插入一个菜单项,在菜单项中添加子菜单,具体要求见表格
顶层菜单项
子菜单项
ID号
文件(&F)
打开(&O)
ID_FILEOPEN
关闭(&C)
ID_FILECLOSE
退出(&X)
ID_FILEEXIT
播放(&P)
开始(&S)
ID_PLAYSTART
暂停(&P)
ID_PLAYPAUSE
停止(&T)
ID_PLAYSTOP
视频(&V)
原始大小(&O)
ID_VIDEO1X
原始大小的2倍(&D)
ID_VIDEO2X
音频(&A)
调节音量(&V)
ID_AUDEOVOLUME
调节左右声道平衡(&B)
ID_AUDEOBALANCE
帮助(&H)
关于播放器(&A)
ID_HELPABOUT
3、用类向导为菜单添加类CTCY2412Dlg,与对话框关联起来。
4、在对话框中添加ActiveMovie控件,ID为IDC_AMOVIE。
如图:
5、用类向导为IDC_AMOVIE映射一个成员变量m_AMovie
6、用类向导实现各个按钮的功能,为
“打开”--OnFileopen()“关闭”--OnFileclose()“退出”---OnFileexit()
“开始”--OnPlaystart()“暂停”-OnPlaypause()“停止”--OnPlaystop()“原始大小”OnVideo1x()“放大2倍”---OnYi(“缩小2倍”---OnVideo2x()“增加”---OnAdd()“减小”--OnDown()
添加代码。
voidCCTLY2412Dlg:
:
OnFileopen()
{
//TODO:
Addyourcommandhandlercodehere
charszFileFilter[]=
"AVIFile(*.avi)|*.avi|"
"Mp4File(*.mp4)|*.mp4|"
"Mp3File(*.mp3)|*.mp3|"
"WmaFile(*.wma)|*.wma|"
"VideoFile(*.dat)|*.dat|"
"WaveFile(*.wav)|*.wav|"
"MovieFile(*.mov)|*.mov|"
"MediaFile(*.mmm)|*.mmm|"
"MidFile(*.mid;*,rmi)|*.mid;*.rmi|"
"MPEGFile(*.mpeg)|*.mpeg|"
"AllFile(*.*)|*.*||";
CFileDialogFileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);
if(FileDlg.DoModal()==IDOK)
{
CStringPathName=FileDlg.GetPathName();
PathName.MakeUpper();
m_AMovie.SetFileName(PathName);
}
}
voidCCTLY2412Dlg:
:
OnFileclose()
{
//TODO:
Addyourcommandhandlercodehere
m_AMovie.SetFileName("");
}
----------------------------------------------------------------------------------------------------------
voidCCTLY2412Dlg:
:
OnFileexit()
{
//TODO:
Addyourcommandhandlercodehere
OnCancel();
}
-------------------------------------------------------------------------------------------------------------
voidCCTLY2412Dlg:
:
OnPlaystart()
{
//TODO:
Addyourcommandhandlercodehere
m_AMovie.Run();
SetTimer(0,20,NULL);//设置定时器
}
-------------------------------------------------------------------------------------------------------------
voidCCTLY2412Dlg:
:
OnPlaypause()
{
//TODO:
Addyourcommandhandlercodehere
m_AMovie.Pause();
}
------------------------------------------------------------------------------------------------------------
voidCCTLY2412Dlg:
:
OnPlaystop()
{
//TODO:
Addyourcommandhandlercodehere
m_AMovie.Stop();
KillTimer(0);//关掉定时器
}
voidCCTLY2412Dlg:
:
OnVideo1x()
{
//TODO:
Addyourcommandhandlercodehere
m_AMovie.Pause();
m_AMovie.SetMovieWindowSize
(1);
m_AMovie.Run();
}
--------------------------------------------------------------------------------------------------------------
voidCCTLY2412Dlg:
:
OnVideo2x()
{
//TODO:
Addyourcommandhandlercodehere
m_AMovie.Pause();
m_AMovie.SetMovieWindowSize
(2);
m_AMovie.Run();
}
----------------