多媒体编程音频视频实验讲义.docx

上传人:b****1 文档编号:14260091 上传时间:2023-06-21 格式:DOCX 页数:17 大小:323.50KB
下载 相关 举报
多媒体编程音频视频实验讲义.docx_第1页
第1页 / 共17页
多媒体编程音频视频实验讲义.docx_第2页
第2页 / 共17页
多媒体编程音频视频实验讲义.docx_第3页
第3页 / 共17页
多媒体编程音频视频实验讲义.docx_第4页
第4页 / 共17页
多媒体编程音频视频实验讲义.docx_第5页
第5页 / 共17页
多媒体编程音频视频实验讲义.docx_第6页
第6页 / 共17页
多媒体编程音频视频实验讲义.docx_第7页
第7页 / 共17页
多媒体编程音频视频实验讲义.docx_第8页
第8页 / 共17页
多媒体编程音频视频实验讲义.docx_第9页
第9页 / 共17页
多媒体编程音频视频实验讲义.docx_第10页
第10页 / 共17页
多媒体编程音频视频实验讲义.docx_第11页
第11页 / 共17页
多媒体编程音频视频实验讲义.docx_第12页
第12页 / 共17页
多媒体编程音频视频实验讲义.docx_第13页
第13页 / 共17页
多媒体编程音频视频实验讲义.docx_第14页
第14页 / 共17页
多媒体编程音频视频实验讲义.docx_第15页
第15页 / 共17页
多媒体编程音频视频实验讲义.docx_第16页
第16页 / 共17页
多媒体编程音频视频实验讲义.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

多媒体编程音频视频实验讲义.docx

《多媒体编程音频视频实验讲义.docx》由会员分享,可在线阅读,更多相关《多媒体编程音频视频实验讲义.docx(17页珍藏版)》请在冰点文库上搜索。

多媒体编程音频视频实验讲义.docx

多媒体编程音频视频实验讲义

南京工程学院

实验报告

 

课程名称多媒体编程基础

实验项目名称音频和视频

实验学生班级多媒体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_play.newMedia(filename));

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分)

合计

成绩评定

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2