播放多媒体——MCI控件

Windows已经为我们提供了一个关于多媒体处理的动态连接库WINMM.DLL(旧版本为MMSYSTEM.DLL),通过调用它所提供的API函数,我们就可以使用MCI指令进行多媒体方面的操作了。

  让我们先来了解一下什么是MCI指令,MCI的全称是Media Control Interfase(媒体控制接口)。实际上MCI是一个高级的函数调用接口,我们可以把它看作是一个解释器,通过它,我们就可以直接和外部音频或视频设备打交道了。

   接下来,就需要了解一下需要用到的API和MCI指令。有三个与MCI有关的API,它们是:

mciSendString(MCI指令,返回文本,返回长度,句柄复查);
mciExecute(MCI指令,返回文本,返回长度,句柄复查);
mciGetErrorString(MCI指令,返回文本,返回长度,句柄复查)。

mciSendString函数的功能是传送指令字符串给MCI,mciExecute的功能和mciSendString一样,不同的是当发生错误时mciExecute会弹出对话框显示错误信息。mciGetErrorString的功能是将MCI错误代码转换为字符串。

 

MCI的Command命令,最重要的一个,可以执行各种操作

Open,Close,Play,Pause,Stop,Back,Step,Prev,Next,Seek,Record,Eject,Sound和Save

其格式如下:

[窗体.]MMControl.command=命令字符串。

Open:使用MCI_OPEN命令打开一个设备;所用的属性:Notify(False),Wait(True),Shareable,Devicetype,FileName。

Close:使用MCI_CLOSE命令关闭一个设备;所用的属性:Notify(False),Wait(True)。

Play:使用MCI_PLAY;所用的属性:Notify(True),Wait(False),From,To。

Pause:使用MCI_PLAY命令暂停播放或录制,设备处于暂停状态时,将用MCI_RESUME命令恢复播放或录制。属性:Nofity(False),Wait(True)。

Stop:使用MCI_STOP命令停止播放或录制。属性:Notify(False),Wait(True)。

Back:使用MCI_STEP倒退一定的步长。属性:Notify(False),Wait(True),Frames。

Step:使用MCI_STEP前进一定步长。属性:Notify(False),Wait(Ture),Frames。

Prev:用Seek命令退回到当前磁道的起始处,如果在执行Prev命令三秒中内再执行Prev命令则回到前一磁道的起始处。属性:Notify(False),Wait(True)。

Next:用Seek命令到下一磁道的起始处,如果当前是最后磁道,则回到最后磁道的起始处。属性:Notify(False),Wait(True)。

Seek:如果不处于播放状态,可用MCI_SEEK命令寻找一个位置。如果正在播放,则使用MCI_PLAY命令从寻找到的位置播放。属性:Notify(False),Wait(True)。

Record:使用MCI_RECORD命令录制。属性:Notify(False),Wait(True),To,RecordMode(0—Insert,1—Overwrite)。

Eeject:使用MCI_SET弹出媒体设备中的媒体。属性:Notify(False),Wait(True)。

Sound:使用MCI_SOUND播放声音。属性:Notify(False),Wait(False),FileName。

Save:使用MCI_SAVE命令保存文件。属性:Notify(False),Wait(True),FileName。

 

MCI的一些属性

1.Wait属性

用来指定多媒体MCI控制,在将控制权交还给应用程序前,是否先等待下一个MCI命令执行完毕。该属性取值中在执行下一个MCI命令时才有效。

False:多媒体MCI立刻将控制权交给应用程序,不管MCI命令是否完成。

True:多媒体MCI直到下一MCI命令执行完,才将控制权交给应用程序。

2.Notify属性

默认值为False,表示下一命令将不产生Done事件;若设为True则反之。

Done事件格式如下:Sub MMControl_Done(NotifyCode AS Long)

3.UpdateInterval属性

用来指定相邻状态更新事件间间隔的时间,单位为毫秒,格式如下:

[窗体.]MMControl_StatusUpdate()

4.DeviceType属性

用来指定要打开的MCI设备类型,其格式如下:

[窗体.]MMControl.DeviceType[=设备类型名]

可以用的设备类型名有:AVIVideo,CDAudio,DigitalVideo,MMMovie,Scanner,SequencerMIDI,VCR,Videodisc,WaveAudio等。当打开简单设备时(如:Audio CD等不需要文件的设备)必须设置该属性;如使用的是复合型MCI设备时(即文件的扩展名不能告诉你要使用的设备名)该属性也应当被设置。

5.TimeFormat属性

用来指定有关Position属性的时间表示格式,格式如下:

[窗体.]MMControl.TimeFormat[=类型]

6.RecordMode属性

用CanRecord属性测试一个设备是否支持录制功能后,你可以用该属性来指定MCI设备的录制模式。格式如下:

[窗体.]MMControl.RecordMode[=模式]

RecordMode属性取值为0表示是Insert录制模式;1是Overwrite模式;对WaveAudio设备来说它只支持Insert模式。

7.From,To属性

根据TimeFormat属性给定的时间表示方法来指定From(起始)To(终止)位置。

8.Shareable属性

用来指定是否可以由多个程序共享一个MCI设备,格式如下:

[窗体.]MMControl.Shareable[={True|False}]

9.Frames属性

用来指定Stop命令和Back命令步进或倒退的帧数,默认为1。

10.AutoEnable属性

可以决定多媒体MCI控制中各个按钮的有效或无效。如将其值设为True,则多媒体MCI控制命令根据当前的按钮状态来决定哪些按钮的MCI设备类型可用。格式如下:

[窗体.]MMControl.AutoEnable[={True|False}]

使用MCI控制的事件:

   1. Done事件。

   2. StatusUpdate事件。

   3. ButtonClick事件:当控制按钮按下和释放鼠标时发生。

      格式:Sub MMControl_Button(Cancel As Integer)

      其中Button可以是Back,Eject,Next,Pause,Play,Prev,Record,Step,Stop 等。

   4.Buttoncompleted事件:当MCI命令执行完毕后发生。

      格式:Sub MMControl_ButtonCompleted(Errorcode As Long)

   5. ButtonGotFocus事件:当MCI控制中的按钮获得输入焦点时(此时其按钮上有一个虚线框)产生。

      ButtonLostFocus事件::当MCI控制中的按钮失去输入焦点时产生。

 

附录:

可以用的设备类型名有:AVIVideo,CDAudio,DigitalVideo,MMMovie,Scanner,SequencerMIDI,VCR,Videodisc,WaveAudio

(AVI,MIDI,WAV,CD,DVD,VCR)

 

 

MCI的设备类型有两种 ,一是 简单设备,如 CD 、视盘演播器;二是复合设备(需要文件的设备,如数字视频及波形音频设备等。
    如果需要通过 MCI 去控制设备,必须将相应的 MCI 驱动程序和设备的驱动程序(扩展名是 DRV )、 DLL 装入。 Windows 中的控制面板可完成 MCI 驱动程序的安装。在 Windows 中, WIN.INI 文件中的 [mci] 部分包括一个已安装了的设备类型表,如下所示。 
     [mci extensions]
     wav=waveaudio
     mid=Sequencer
     rmi=Sequencer
     avi=AVIVideo
     m1v=MpegVideo
     mpe=MpegVideo
     dat=MpegVideo1 

 

 

 

 

 

支持的格式有wave files, midi files, AVI Video, cd audio, vcr, video disc, and others..,自己尝试了一下,好像还可以播放视频中的音轨。
     ● 常用的API函数
/** 窗口句柄所指对象是否可播放 */   
MCIWndCanPlay(hwnd)   
/** 窗口句柄所指对象是否可录音 */   
MCIWndCanRecord(hwnd)   
/** 进行录音 */   
MCIWndRecord(hwnd)   
/** 关闭窗口句柄 */   
MCIWndClose(hwnd)   
/** 播放窗口句柄所指对象 */   
MCIWndPlay(hwnd)   
/** 停止播放窗口句柄所指对象 */   
MCIWndStop(hwnd)   
/** 暂停播放窗口句柄所指对象 */   
MCIWndPause(hwnd)   
/** 恢复(暂停)播放窗口句柄所指对象 */   
MCIWndResume(hwnd)   
/** 移动播放进度至指定位置 */   
MCIWndSeek(hwnd, lPos)   
/** 移动播放进度至初始位置 */   
MCIWndHome(hwnd)   
/** 移动播放进度至结束位置 */   
MCIWndEnd(hwnd)   
/** 倒退播放窗口句柄所指对象 */   
MCIWndPlayReverse(hwnd)   
/** 从指定位置播放窗口句柄所指对象 */   
MCIWndPlayFrom(hwnd, lPos)   
/** 播放窗口句柄所指对象直至指定位置 */   
MCIWndPlayTo(hwnd, lPos)   
/** 播放窗口句柄所指对象的指定区间 */   
MCIWndPlayFromTo(hwnd, lStart, lEnd)   
/** 获取当前的播放进度 */   
MCIWndGetPosition(hwnd)   
/** 获取窗口句柄所指对象文件的长度 */   
MCIWndGetLength(hwnd)   
/** 销毁窗口句柄 */   
MCIWndDestroy(hwnd)   
/** 设置播放音量 */   
MCIWndSetVolume(hwnd,iVol)   
/** 获取当前播放音量 */   
MCIWndGetVolume(hwnd)   
/** 设置播放速率 */   
MCIWndSetSpeed(hwnd,iSpeed)   
/** 获取播放速率 */   
MCIWndGetSpeed(hwnd)   
/** 设置是否循环播放 */   
MCIWndSetRepeat(hwnd,f)   
/** 获取是否循环播放 */   
MCIWndGetRepeat(hwnd

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值