多媒体编程音频视频实验报告汇总.docx
- 文档编号:8017175
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:15
- 大小:873.80KB
多媒体编程音频视频实验报告汇总.docx
《多媒体编程音频视频实验报告汇总.docx》由会员分享,可在线阅读,更多相关《多媒体编程音频视频实验报告汇总.docx(15页珍藏版)》请在冰豆网上搜索。
多媒体编程音频视频实验报告汇总
南京工程学院
实验报告
课程名称多媒体编程基础
实验项目名称音频和视频
实验学生班级多媒体132
实验学生姓名滕超
学 号202130229
同组学生姓名无
实验时间2016年5月26日
实验地点信息楼A213
实验5音频/视频处理
一、实验目的:
1.理解Windows系统中音频、视频处理的方法。
2.理解MCI接口的概念。
3.了解音视频处理技巧,以及实际应用方法
4.掌握实现音频播放器和视频播放器的常用方法。
二、实验环境及开发工具:
PC机、Windows8.1操作系统、VisualC++2013
三、实验要求及内容:
1)理解第9章教材例题及上课所讲的参考例程。
2)运用学过的知识,在理解例题的基础上自己编写一个多媒体播放器应用程序,包括:
一个音频(MP3、wma)播放器和一个视频播放器处理(avi、wmv、asf)程序,要求具有以下功能:
Ø可以播放本机中的音视频媒体文件文件;
Ø音频播放参照课堂提供的例子,必须创建一个播放类来实现
Ø视频播放可以直接使用WMP控件,适当添加针对文件的操作功能。
音频设计流程图:
音频界面设计如下:
使用CPlayWave类
/*PlayWave.h*/
#pragmaonce
#include"mmsystem.h"
classCPlayWave
{
//定义保护保护成员
protected:
MCIDEVICEIDm_DeviceID;//记录波形设备ID
MCIDEVICEIDm_ElementID;//记录波形元素ID
public:
CPlayWave(void);
~CPlayWave(void);
DWORDInitDevice(void);
DWORDTeminalDevice(void);
DWORDPlay(HWNDhWnd,LPCWSTRpFileName);
DWORDStop(void);
DWORDPause();
DWORDResume();
};
/*PlayWave.cpp*/
#include"StdAfx.h"
#include"PlayWave.h"
CPlayWave:
:
CPlayWave(void)
{
m_DeviceID=0;//初始化设备ID
m_ElementID=0;//初始化元素ID
InitDevice();//调用InitDevice方法初始化设
}
CPlayWave:
:
~CPlayWave(void)
{
if(m_ElementID)//判断波形元素是否为0
Stop();//停止波形元素
if(m_DeviceID)//判断波形设备是否为0
TeminalDevice();//停止波形设备
}
DWORDCPlayWave:
:
InitDevice(void)
{
DWORDdwResult=0;//定义一个整型变量
if(m_DeviceID==0)//如果设备ID为0
{
MCI_OPEN_PARMSmciInitParms;//定义打开参数
mciInitParms.lpstrDeviceType=(LPWSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;
dwResult=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID
|MCI_WAIT,(DWORD)(LPVOID)&mciInitParms);//打开波形设备
m_DeviceID=mciInitParms.wDeviceID;
}
returndwResult;
}
DWORDCPlayWave:
:
TeminalDevice(void)
{
DWORDdwResult=0;//定义一个整型变量
if(m_DeviceID)//判断设备ID是否为0
{
//关闭波形设备
dwResult=mciSendCommand(m_DeviceID,MCI_CLOSE,NULL,NULL);
}
m_DeviceID=0;//将波形设备ID设置为0
returndwResult;
}
DWORDCPlayWave:
:
Play(HWNDhWnd,LPCWSTRpFileName)
{
MCI_OPEN_PARMSmciOpenParms;//定义打开参数
memset(&mciOpenParms,0,sizeof(MCI_OPEN_PARMS));//初始化参数
mciOpenParms.lpstrElementName=pFileName;//设置文件名
DWORDdwResult=0;//定义整型变量
dwResult=mciSendCommand(m_DeviceID,MCI_OPEN,MCI_OPEN_ELEMENT,
(DWORD)(LPVOID)&mciOpenParms);//打开波形元素
if(!
dwResult)
{
m_ElementID=mciOpenParms.wDeviceID;//获取波形元素ID
MCI_PLAY_PARMSmciPlayParms;//定义播放参数
mciPlayParms.dwCallback=(DWORD)hWnd;//设置播放参数
dwResult=mciSendCommand(m_ElementID,MCI_PLAY,
MCI_NOTIFY,(DWORD)(LPVOID)&mciPlayParms);//播放wav文件
}
returndwResult;
}
DWORDCPlayWave:
:
Stop(void)
{
DWORDdwResult=0;//定义一个整型变量
if(m_ElementID)//判断波形元素ID是否为0
{
//关闭波形元素
dwResult=mciSendCommand(m_ElementID,MCI_CLOSE,NULL,NULL);
m_ElementID=0;//设置波形元素ID为0
}
returndwResult;
}
DWORDCPlayWave:
:
Pause()
{
mciSendCommand(m_ElementID,MCI_PAUSE,0,NULL);
return0;
}
DWORDCPlayWave:
:
Resume()
{
mciSendCommand(m_ElementID,MCI_RESUME,0,NULL);
return0;
}
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
“添加”按钮的事件处理
voidCMusicDlg:
:
OnBnClickedAddlist()
{
//TODO:
在此添加控件通知处理程序代码
//m_List.ResetContent();//清空列表
CFileDialogflDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT
|OFN_ALLOWMULTISELECT,L"音频文件|*.wav;*.mp3;*.wma||",this);//定义一个问价打开对话框
if(flDlg.DoModal()==IDOK)//判断用户是否按OK按钮
{
POSITIONpos=flDlg.GetStartPosition();//获取文件名列表的首位置
while(pos!
=NULL)//利用循环遍历文件名列表
{
m_List.AddString(flDlg.GetNextPathName(pos));//将文件名添加的列表框控件中
}
}
}
“播放”按钮添加事件处理
voidCMusicDlg:
:
OnLbnDblclkList1()
{
//TODO:
在此添加控件通知处理程序代码
intselIndex=m_List.GetCurSel();//获取当前选择的列表项索引
if(selIndex!
=LB_ERR)//判断是否有项目被选中
{
//定义一个字符串对象
CStringstr;
//根据索引获取当前项目的字符串
m_List.GetText(selIndex,str);
//停止播放
wave.Stop();
wave.TeminalDevice();
//开始播放歌曲
wave.Play(m_hWnd,str);
}
}
双击列表框播放音乐
voidCMusicDlg:
:
OnLbnDblclkList1()
{
//TODO:
在此添加控件通知处理程序代码
intselIndex=m_List.GetCurSel();//获取当前选择的列表项索引
if(selIndex!
=LB_ERR)//判断是否有项目被选中
{
//定义一个字符串对象
CStringstr;
//根据索引获取当前项目的字符串
m_List.GetText(selIndex,str);
//停止播放
wave.Stop();
wave.TeminalDevice();
//开始播放歌曲
wave.Play(m_hWnd,str);
}
}
“暂停”和“继续”事件处理
voidCMusicDlg:
:
OnBnClickedBstopPlay()
{
wave.Pause();
is_stop=!
is_stop;
GetDlgItem(IDC_BSTOP_PLAY)->SetWindowText(L"继续");
if(is_stop)
{
wave.Resume();
GetDlgItem(IDC_BSTOP_PLAY)->SetWindowText(L"暂停");
}
}
视频播放器设计流程图:
定义变量:
CWMPPlayer4m_play;
CWMPControlsm_mediacontrol;//控制按钮关联
CWMPSettingsm_mediasetting;//设置按钮关联
CWMPMediam_media;//媒体
CProgressCtrl*m_progress;//进度条
“打开”按钮事件处理
voidCVideoPlayer:
:
OnBnClickedVideoopen()
{CStringfilename;
CFileDialogdlg(TRUE,NULL,L"*.*",OFN_FILEMUSTEXIST,
L"串流多媒体(*.asf)|*.asf|"
L"音频视频交错格式(*.avi)|*.avi|"
L"即时播音系统(*.rm)|*.rm|"
L"波音音频设备(*.wav)|*.wav|"
L"所有文件(*.*)|*.*||");
if(IDOK==dlg.DoModal())
{
filename=dlg.GetPathName();
m_play.put_URL(filename);//播放
}
m_media=static_cast
m_progress->SetRange(0,(int)m_media.get_duration());//媒体总长度
m_progress->SetPos(0);
}
“播放”按钮事件处理
voidCVideoPlayer:
:
OnBnClickedVideoplay()
{
m_mediacontrol.play();
}
“暂停”按钮事件处理
voidCVideoPlayer:
:
OnBnClickedVideosuspend()
{
m_mediacontrol.pause();
}
“停止”按钮事件处理
voidCVideoPlayer:
:
OnBnClickedVideostop()
{
m_mediacontrol.stop();
}
“全屏”按钮事件处理
voidCVideoPlayer:
:
OnBnClickedfullscreen()
{
m_play.put_fullScreen(TRUE);
}
“音量-”按钮事件处理
voidCVideoPlayer:
:
OnBnClickedVideol()
{
m_mediasetting.put_volume(m_mediasetting.get_volume()-10);
}
“音量+”按钮事件处理
voidCVideoPlayer:
:
OnBnClickedVideor()
{
m_mediasetting.put_volume(m_mediasetting.get_volume()+10);
}
“进度条”控件处理
voidCVideoPlayer:
:
PlayStateChangeOcx1(longNewState)
{
if(NewState==3)//播放状态时,开启定时器
SetTimer(1,1000,NULL);
elseif(NewState==1)//停止时,关闭定时器,进度条回0
{
KillTimer
(1);
}
else
KillTimer
(1);
}
voidCVideoPlayer:
:
OnTimer(UINT_PTRnIDEvent)
{
if(nIDEvent!
=1)
return;
m_progress->SetPos(m_progress->GetPos()+1);
CDialogEx:
:
OnTimer(nIDEvent);
}
“快进”按钮事件处理
voidCVideoPlayer:
:
OnBnClickedBtnfront()
{
m_mediacontrol.fastForward();//快进
}
“快退”按钮事件处理
voidCVideoPlayer:
:
OnBnClickedBtnback()
{
m_mediacontrol.fastReverse();//快退
}
4、运行结果
音频播放器:
点击“添加”按钮,添加”.mp3”文件,可以双击播放,也可以单击播放按钮播放
点击“暂停”按钮后,音乐暂停播放,按钮名称变成“继续”,再点击“继续”
音乐继续播放
视频播放器:
单击“打开”按钮,添加播放文件
点击“全屏”或者双击视频可以达到全屏效果
五、实验总结
在实验的过程中不仅检验了我所学习的知识,也让我知道如何去扩展的学习更多的知识,在实验的过程中,我遇到了很多的问题,比如不知道如何导CWMPMedia类的包等,但是我通过和同学相互探讨、相互学习、相互监督,最终解决了问题。
本次实验实现文件的打开,进度条来显示视频播放的进度,音频播放器实现了暂停,继续,视频播放器,不仅可以播放视频,还可以播放音频文件,虽然使用了很多的接口,很多的函数已经封装好了,但是我在寻找这些和调试使用这些接口时候,还是花费了很多时间。
最后看结果,可能觉得简短了一点,但是在实现设计的过程中一点都不轻松,可以说还有一点的艰难,但虽然如此,依然让我感受颇深,收获颇多。
虽然是一个简单的音频,视频播放器的设计和实现,但是却使我对VC++有了更进一步的接触和了解,也让我对WindowsMediaPlayer控件有了新的认识和全面的了解。
教师评阅:
评阅项目及内容
得分
1.考勤(10分)
2.态度(10分)
3.动手能力(20分)
4.实验完成情况(20分)
5.报告撰写内容(40分)
合计
成绩评定
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多媒体 编程 音频视频 实验 报告 汇总