下载本文示例代码
种信息媒体的简单复合,它是一种把文本(Text)、图形(Graphics)、图像(Images)、动画(Animation)和声音(Sound)等形式的信息结合在一起,并通过计算机进行综合处理和控制,能支持完成一系列交互式操作的信息技术。多媒体技术的发展改变了计算机的使用领域,使计算机由办公室、实验室中的专用品变成了信息社会的普通工具,广泛应用于工业生产管理、学校教育、公共信息咨询、商业广告、军事指挥与训练,甚至家庭生活与娱乐等领域。 我们可以利用MCI控件开发多媒体项目,但现在介绍一种更简便的方法,用ACTIVEMOVIE CONTROL OBJECT控件来实现的方法。可视动画控件ActiveMovie是Microsoft公司开发的ActiveX控件,从开始的1.0版、1.2版到现在的2.0版,功能上已经有了很大的改进。由于该控件内嵌了Microsoft MPEG音频解码器和Microsoft MPEG视频解码器,所以能够很好地支持音频文件和视频文件,用其播放的VCD效果就很好。另外,播放时若用鼠标右键单击画面,可以直接对画面的播放、暂停、停止等进行控制,读者还可以自行在"属性"栏中对影片播放进行控制设置,用起来非常方便。 当前在Microsoft公司推出的Visual C 6.0中已经包含了ActiveMovie控件的2.0版,本实例将介绍在Visual C 6.0中利用这个控件实现自动连续播放多个多媒体文件。程序编译运行后的界面效果如图一所示:
图一、播放AVI文件的界面效果图 一、实现方法 可视动画控件ActiveMovie Control Object 是Microsoft公司开发的ActiveX控件,为程序员提供了在该层次上控制媒体设备接口的能力。它包含一组高层次的独立于设备的命令,可以控制音频和视频外设,我们不必关心具体的设备便可以对CD、视盘机、波形音频设备、视频播放设备和MIDI设备等媒体设备进行控制,也可以理解成设备面板上的一排按键,通过选择不同的按键(发送不同的命令)即可让设备完成各种功能,而不必关心设备的内部实现,它是一种主要实现音/视频播放的方法。下面先介绍一下当前音/视频文件的主要形式: 1、波形音频 波形音频是一种电子数字化声音,是计算机播放音频的一种重要的形式,它存储的声音的波形信息,特点是:当播放播形音频时,不管播放文件的设备是何种类型,都会得到相似的声音。波形音频文件通常以.wav作为文件扩展名。由于采用波形音频存储电子需要大量的存储空间,因此它一般只用于短时间的声音播放。 2、MIDI音乐 MIDI(Musical Instrument Digital Interface)在多媒体音频中占有重要的位置,是播放和录制音乐的国际标准,它确定了连接音乐设备的电缆线、硬件和通信协议。多媒体计算机只需具有MIDI接口声卡和MIDI合成器,就具有处理MIDI的功能。MIDI在处理音乐时是将MIDI音乐设备上产生的活动编码记录下来,将这些数据传递到MIDI合成器上就能中现原来的演奏。MIDI的消息有两种类型:状态字节和数字字节。状态字节描述发送的类别(动作和函数),数字字节总是跟在状态字节后,表示发送消息的实际值。数值字节的个数取决于状态字节表示的消息类型。MIDI通过通道字节最高位区别这两种类型。最高位为1表示状态字节,最高位为0表示数字字节。 3、CD音频 CD音频采用红皮书标准,通过CD-ROM驱动器来播放CD音频。CD音频需要的存储量大,一张光盘大约能够存储10首歌,70分钟音频左右。在一般情况下,整个光盘都用来存储CD音频数据,并划分为多个音轨,轨道的具体长度可以不定,通常一个音轨对应一首曲目。CD音频的长度由分、秒、帧的形式来衡量,最小的单位为帧,每一帧为1/75秒,一分等于60秒。 4、数字视频 数字视频(Digital Video)使用数据信息在计算机上实现动画的效果,它是利用人眼睛的视觉暂留形成的,使人们连续图像效果所需的最低播放速度是24幅/秒,播放速度越快,数字视频给人的视觉连续性效果越好。存储视频影像需要巨大的磁盘空间,一般来讲,1秒钟全屏视频信号需要大约28MB的空间。为了实现连续的视频播放,不仅需要有足够的空间来存储视频音像信息,还需要保证硬盘有28MB/秒的传播速度。数字视频包括AVI、MEPG等格式。其中AVI文件格式是由微软提出的在WINDOWS下存储视频信息的标准。它以一系列的位图来存储视频信息,并同时在文件中以数字形式来存储数字化视频信息,它实际上是由一组信息流组成的文件。ACTIVEMOVIE CONTROL OBJECT的常用属性包括以下几个: (1)播放文件的函数:
void CActiveMovie3::Run(){ InvokeHelper(0x60020001, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);} (2)暂停播放的函数:
void CActiveMovie3::Pause(){ InvokeHelper(0x60020002, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);} (3)停止播放的函数:
void CActiveMovie3::Stop(){ InvokeHelper(0x60020003, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);} (4)获得文件的函数:
CString CActiveMovie3::GetFileName(){ CString result; InvokeHelper(0xb, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL); return result;} (5)设置文件的函数:
void CActiveMovie3::SetFileName(LPCTSTR lpszNewValue){ static BYTE parms[] = VTS_BSTR; InvokeHelper(0xb, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms,lpszNewValue);} (6)获得播放位置的函数:
double CActiveMovie3::GetCurrentPosition(){ double result; InvokeHelper(0xd, DISPATCH_PROPERTYGET, VT_R8, (void*)&result, NULL); return result;} (7)设置播放位置的函数:
void CActiveMovie3::SetCurrentPosition(double newValue){ static BYTE parms[] = VTS_R8; InvokeHelper(0xd, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);} (8)获得音量的函数:
long CActiveMovie3::GetVolume(){ long result; InvokeHelper(0x13, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL); return result;} (9)设置音量的函数:
void CActiveMovie3::SetVolume(long nNewValue){ static BYTE parms[] = VTS_I4; InvokeHelper(0x13, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, nNewValue);} (10)设置自动开始播放的函数:
void CActiveMovie3::SetAutoStart(BOOL bNewValue){ static BYTE parms[] = VTS_BOOL; InvokeHelper(0x28, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, bNewValue);} 在Visual C 6.0中,一般情况都是在基于对话框的应用程序中使用ActiveMovie控件,可在菜单中依次选择"project- >Add To Project- >Components And Controls",在出现的"Components And Controls Gallery"对话框中打开"Registered Active Controls"文件夹,选中"ActiveMovie Control Object"选项,按"Insert"按钮后关闭该对话框,ActiveMovie控件便出现在程序编辑器的控件面板中,调整好控件在对话框中的位置。利用ClassWizard为ActiveMovie控件声明一个变量,设该变量的名字为m_ActiveMovie,当用户选择过待播放的文件后,为了能够播放多个文件,可以使用如下代码来向列表控件添加待播放的文件名:
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);if(dlg.DoModal()==IDOK){ CString m_filename=dlg.GetPathName(); m_list.AddString(m_filename); UpdateData(FALSE);} 为了实现多媒体文件的循环播放,我们利用定时器来工作,在定时器中添加代码如下:
CString m_filename; //定义文件变量double CurPos=m_ActiveMovie.GetCurrentPosition(); //获得播放位置if(CurPos= = 0){ //选择列表框的第一个文件 m_list.SetCurSel(0); m_list.GetText(0,m_filename); //设置自动播放 m_ActiveMovie.SetAutoStart(1); //设置文件 m_ActiveMovie.SetFileName(m_filename); //播放 m_ActiveMovie.Run(); m_list.GetCurSel(); //插入列表框最后 m_list.InsertString(-1,m_filename); //删除用过的文件 m_list.DeleteString(0); }CDialog::OnTimer(nIDEvent);} 当需要关闭音/视频的播放时,可以用函数m_ActiveMovie.Stop()来实现。 二、编程步骤 1、 启动Visual C 6.0,生成一个基于对话框的程序,将该程序命名为"Player",去掉程序中对话框上的"确定" 和"取消"按钮,并加入ActiveMovie控件; 2、 使用资源编辑器对话框添加三个按钮("选择曲目Open"、"循环播放Play"、"关闭Stop")和一个列表框; 3、 使用ClassWizard为三个按钮和列表框添加成员变量,分别为:CButton m_stop、 CButton m_play、CListBox m_list;并且为三个按钮添加鼠标单击消息响应函数; 4、 添加代码,编译运行程序。共2页。 1 2 :
种信息媒体的简单复合,它是一种把文本(Text)、图形(Graphics)、图像(Images)、动画(Animation)和声音(Sound)等形式的信息结合在一起,并通过计算机进行综合处理和控制,能支持完成一系列交互式操作的信息技术。多媒体技术的发展改变了计算机的使用领域,使计算机由办公室、实验室中的专用品变成了信息社会的普通工具,广泛应用于工业生产管理、学校教育、公共信息咨询、商业广告、军事指挥与训练,甚至家庭生活与娱乐等领域。 我们可以利用MCI控件开发多媒体项目,但现在介绍一种更简便的方法,用ACTIVEMOVIE CONTROL OBJECT控件来实现的方法。可视动画控件ActiveMovie是Microsoft公司开发的ActiveX控件,从开始的1.0版、1.2版到现在的2.0版,功能上已经有了很大的改进。由于该控件内嵌了Microsoft MPEG音频解码器和Microsoft MPEG视频解码器,所以能够很好地支持音频文件和视频文件,用其播放的VCD效果就很好。另外,播放时若用鼠标右键单击画面,可以直接对画面的播放、暂停、停止等进行控制,读者还可以自行在"属性"栏中对影片播放进行控制设置,用起来非常方便。 当前在Microsoft公司推出的Visual C 6.0中已经包含了ActiveMovie控件的2.0版,本实例将介绍在Visual C 6.0中利用这个控件实现自动连续播放多个多媒体文件。程序编译运行后的界面效果如图一所示:
图一、播放AVI文件的界面效果图 一、实现方法 可视动画控件ActiveMovie Control Object 是Microsoft公司开发的ActiveX控件,为程序员提供了在该层次上控制媒体设备接口的能力。它包含一组高层次的独立于设备的命令,可以控制音频和视频外设,我们不必关心具体的设备便可以对CD、视盘机、波形音频设备、视频播放设备和MIDI设备等媒体设备进行控制,也可以理解成设备面板上的一排按键,通过选择不同的按键(发送不同的命令)即可让设备完成各种功能,而不必关心设备的内部实现,它是一种主要实现音/视频播放的方法。下面先介绍一下当前音/视频文件的主要形式: 1、波形音频 波形音频是一种电子数字化声音,是计算机播放音频的一种重要的形式,它存储的声音的波形信息,特点是:当播放播形音频时,不管播放文件的设备是何种类型,都会得到相似的声音。波形音频文件通常以.wav作为文件扩展名。由于采用波形音频存储电子需要大量的存储空间,因此它一般只用于短时间的声音播放。 2、MIDI音乐 MIDI(Musical Instrument Digital Interface)在多媒体音频中占有重要的位置,是播放和录制音乐的国际标准,它确定了连接音乐设备的电缆线、硬件和通信协议。多媒体计算机只需具有MIDI接口声卡和MIDI合成器,就具有处理MIDI的功能。MIDI在处理音乐时是将MIDI音乐设备上产生的活动编码记录下来,将这些数据传递到MIDI合成器上就能中现原来的演奏。MIDI的消息有两种类型:状态字节和数字字节。状态字节描述发送的类别(动作和函数),数字字节总是跟在状态字节后,表示发送消息的实际值。数值字节的个数取决于状态字节表示的消息类型。MIDI通过通道字节最高位区别这两种类型。最高位为1表示状态字节,最高位为0表示数字字节。 3、CD音频 CD音频采用红皮书标准,通过CD-ROM驱动器来播放CD音频。CD音频需要的存储量大,一张光盘大约能够存储10首歌,70分钟音频左右。在一般情况下,整个光盘都用来存储CD音频数据,并划分为多个音轨,轨道的具体长度可以不定,通常一个音轨对应一首曲目。CD音频的长度由分、秒、帧的形式来衡量,最小的单位为帧,每一帧为1/75秒,一分等于60秒。 4、数字视频 数字视频(Digital Video)使用数据信息在计算机上实现动画的效果,它是利用人眼睛的视觉暂留形成的,使人们连续图像效果所需的最低播放速度是24幅/秒,播放速度越快,数字视频给人的视觉连续性效果越好。存储视频影像需要巨大的磁盘空间,一般来讲,1秒钟全屏视频信号需要大约28MB的空间。为了实现连续的视频播放,不仅需要有足够的空间来存储视频音像信息,还需要保证硬盘有28MB/秒的传播速度。数字视频包括AVI、MEPG等格式。其中AVI文件格式是由微软提出的在WINDOWS下存储视频信息的标准。它以一系列的位图来存储视频信息,并同时在文件中以数字形式来存储数字化视频信息,它实际上是由一组信息流组成的文件。ACTIVEMOVIE CONTROL OBJECT的常用属性包括以下几个: (1)播放文件的函数:
void CActiveMovie3::Run(){ InvokeHelper(0x60020001, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);} (2)暂停播放的函数:
void CActiveMovie3::Pause(){ InvokeHelper(0x60020002, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);} (3)停止播放的函数:
void CActiveMovie3::Stop(){ InvokeHelper(0x60020003, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);} (4)获得文件的函数:
CString CActiveMovie3::GetFileName(){ CString result; InvokeHelper(0xb, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL); return result;} (5)设置文件的函数:
void CActiveMovie3::SetFileName(LPCTSTR lpszNewValue){ static BYTE parms[] = VTS_BSTR; InvokeHelper(0xb, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms,lpszNewValue);} (6)获得播放位置的函数:
double CActiveMovie3::GetCurrentPosition(){ double result; InvokeHelper(0xd, DISPATCH_PROPERTYGET, VT_R8, (void*)&result, NULL); return result;} (7)设置播放位置的函数:
void CActiveMovie3::SetCurrentPosition(double newValue){ static BYTE parms[] = VTS_R8; InvokeHelper(0xd, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);} (8)获得音量的函数:
long CActiveMovie3::GetVolume(){ long result; InvokeHelper(0x13, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL); return result;} (9)设置音量的函数:
void CActiveMovie3::SetVolume(long nNewValue){ static BYTE parms[] = VTS_I4; InvokeHelper(0x13, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, nNewValue);} (10)设置自动开始播放的函数:
void CActiveMovie3::SetAutoStart(BOOL bNewValue){ static BYTE parms[] = VTS_BOOL; InvokeHelper(0x28, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, bNewValue);} 在Visual C 6.0中,一般情况都是在基于对话框的应用程序中使用ActiveMovie控件,可在菜单中依次选择"project- >Add To Project- >Components And Controls",在出现的"Components And Controls Gallery"对话框中打开"Registered Active Controls"文件夹,选中"ActiveMovie Control Object"选项,按"Insert"按钮后关闭该对话框,ActiveMovie控件便出现在程序编辑器的控件面板中,调整好控件在对话框中的位置。利用ClassWizard为ActiveMovie控件声明一个变量,设该变量的名字为m_ActiveMovie,当用户选择过待播放的文件后,为了能够播放多个文件,可以使用如下代码来向列表控件添加待播放的文件名:
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);if(dlg.DoModal()==IDOK){ CString m_filename=dlg.GetPathName(); m_list.AddString(m_filename); UpdateData(FALSE);} 为了实现多媒体文件的循环播放,我们利用定时器来工作,在定时器中添加代码如下:
CString m_filename; //定义文件变量double CurPos=m_ActiveMovie.GetCurrentPosition(); //获得播放位置if(CurPos= = 0){ //选择列表框的第一个文件 m_list.SetCurSel(0); m_list.GetText(0,m_filename); //设置自动播放 m_ActiveMovie.SetAutoStart(1); //设置文件 m_ActiveMovie.SetFileName(m_filename); //播放 m_ActiveMovie.Run(); m_list.GetCurSel(); //插入列表框最后 m_list.InsertString(-1,m_filename); //删除用过的文件 m_list.DeleteString(0); }CDialog::OnTimer(nIDEvent);} 当需要关闭音/视频的播放时,可以用函数m_ActiveMovie.Stop()来实现。 二、编程步骤 1、 启动Visual C 6.0,生成一个基于对话框的程序,将该程序命名为"Player",去掉程序中对话框上的"确定" 和"取消"按钮,并加入ActiveMovie控件; 2、 使用资源编辑器对话框添加三个按钮("选择曲目Open"、"循环播放Play"、"关闭Stop")和一个列表框; 3、 使用ClassWizard为三个按钮和列表框添加成员变量,分别为:CButton m_stop、 CButton m_play、CListBox m_list;并且为三个按钮添加鼠标单击消息响应函数; 4、 添加代码,编译运行程序。共2页。 1 2 :
下载本文示例代码
在VC 中实现自动连续播放多媒体文件在VC 中实现自动连续播放多媒体文件在VC 中实现自动连续播放多媒体文件在VC 中实现自动连续播放多媒体文件在VC 中实现自动连续播放多媒体文件在VC 中实现自动连续播放多媒体文件在VC 中实现自动连续播放多媒体文件在VC 中实现自动连续播放多媒体文件在VC 中实现自动连续播放多媒体文件在VC 中实现自动连续播放多媒体文件在VC 中实现自动连续播放多媒体文件在VC 中实现自动连续播放多媒体文件在VC 中实现自动连续播放多媒体文件在VC 中实现自动连续播放多媒体文件在VC 中实现自动连续播放多媒体文件