返回列表 回复 发帖

【转帖】VB6.0中多媒体的编程技巧 (二)

即点即播的多媒体点播机

现在用光盘发行的游戏,有很多以后辍名为.MID和.WAV形式存放的多媒体声
音和音乐文件,为了欣赏这些精彩的乐曲,一般是用WINDOWS附件组中的媒体播放
器或其他的应用程序来打开它们:单击“文件”菜单,选“打开”项,程序弹出
“打开文件”对话盒,再选文件类型、驱动器、目录、文件,确认后,再单击
“放音”。操作规范但是繁琐无聊,如果是听少量几个文件尚可,文件多了便有
不胜其烦之感。笔者接触了Visual Basic 3.0后 ,用其编制了一个多媒体点播机,
界面美观、操作快捷高效,用鼠标单击文件名即可放音,还可下拉光标键实现连续
放音。(窗体中的控制布局图及设置后的界面图从略)。
MYPLAY.FRM
D:WINDOWS\SYSTEM\MCI.VBX
ProjWinSize=342,426,248,215
ProjWinShow=2
IconForm=″Forml″
Title=″多媒体点播机″
ExeName=″MYPLAY.EXE″
Sub Commmand2_Click()
End Sub
Sub Dirl_Change()
MMControl1.DeviceType = "waveaudio"
If optionl.Value <> 0 Then
MMControl1.DeviceType = "seqencer"
End If
MMControl1.UpdateInterval = 0
If Not MMControl1.Mode = 524 Then
MMControl1.Command = "close"
End If
If Right(file.Path, 1) <> "\" Then
MMControl1.FileName = file.Path & "\" & file1.FileName
Else
MMControl1.FileName = file.Path & file1.FileName
End If
MMControl1.Commmand = "open"
label6.Caption = MMControl1.FileNane
MMControl1.Command = "play"
End Sub
Sub MMControl1_PauseClick(Cancel As Integer)
MMControl1.UpdateInterval = 0
End Sub
Sub MMControl1_playclick(Cancel As Integer)
MMControl1.UpdateInterval = 50
End Sub
Sub MMControl1_PrevClick(Cancel As Integer)
MMControl1.UpdateInterval = 0
MMControl1.Command = "prev"
End Sub
Sub MMContrlo1_StatusUpdate()
If Not MMControl1.Mode = 526 Then
MMControl1.UpdateInterval = 0
End If
End Sub


VB的多媒体控件VBPLAY.VBX简介

VB是一种编程式多媒体开发工具,用VB开发多媒体的方法有很多。归结一下
有以下四种:自行编写程序代码实现,使用对象连接和嵌入OLE2.0,调用API有
关多媒体的函数,使用第三方VB控件开发商制作的多媒体控件VBX。其中第四种
方法最简便,效果也最明显。
下文将简要介绍Autodesk公司的多媒体控件VBPLAY.VBX的功能和使用方法。
启动VB专业版后,选择File—Add File…,在WINDOWS的SYSTEM目录下选择
VBPLAY.VBX,将VBPLAY.VBX加入到工具箱中,就可以看到ANIMATION著名的图标。
它的主要属性介绍如下:
1、具有基本属性:
name,height,width,top,left,forecolor,backcolor,enabled,visible,
index, 还有一些特殊属性。
2、BorderStyle属性,设定边界条件。分别为0-none,表示无边界,1-Fixed
Single,表示固定单线框,2-Sizable(缺省值),可调尺寸,3-Fixed Double,
固定双线框。这些属性与其他控件类似。
3、All Color:保留所有WINDOWS系统可用的颜色。Colorcycling:保留
WINDOWS系统调色板的颜色。
4、AniHeight 和Aniwidth,设定一个动画的幅面。
5,Autoplay属性,设定自动播放功能。如果设定为TRUE,则程序运行时动画
文件自动播放,若设为FALSE,则需要用程序代码控制。
6、BeginFade,BeginFadeTime,Endfade,EndfadeTime,这是VBPLAY.VBX最
精彩的部分,用这几个简单的属性就可以实现图象的淡入淡出效果。其中:
BeginFade表示动画开始时的效果设定。有三个选择项。cut:切换效果,无
淡入淡出;fade to/From Black 即淡入效果;Fade to/From White 即淡出效果。
以前必须调用Bitbil这样的W INDOWS API函数才能实现的功能现在只需设定属性
即可实现。
BeginFadeTime设定淡入淡出效果执行的时间,与Timer的属性Interval一样,
以毫秒为单位。
EndFade和Endfadetime表示结尾处的淡入淡出效果设定,其选项与BeginFade和BeginFadeTime相似。
7、FullScreen:全屏幕播放。
8、HideAnimation:如果不是在播放状态下,即在设计状态下,不要将画面显示出来。
9、LoopFrame:设定是否循环播放。可选值为TRUE或FALSE。
10、MemoryLoad:设定为TRUE则在打开动画时将它载入内存中,这样可以得到较
快的播放速度。
11、play、pause、pauseatend,设定播放、暂停以及播放完后暂停的时间,以
秒为单位。
12、有关SOUND的属性:Sound属性会打开一个对话框,在对话框中选择背景音乐,
以真正实现“影音同步”,SoundDelay属性设定声音播放的延迟时间,以毫秒为单位。
如果为负数,则表示在动画前先播放音乐,SoundRepeats属性声音播放的次数。
13、AniSettings属性,其上有“Click Here For Dialog”的标识,单击后会
弹出对话框。以上所提到的大部分属性可以在对话框中设定,“TEST”按钮可以测试
效果,“TRANSITIONS”可以设定淡入淡出的效果。
下面给出一例,在VB专业版中调试通过。
各控件的属性设置如下:
FORM1: caption:动画演示
windowstate:2-maxizimed
ANIMATION1: ANIMATION:C:\DEMO\DEMO.FLC
BeginFade:fade to/From Black
BeginFadeTime:3000
EndFade:Fade to/From White
Endfadetime:3000
HideAnimation:true
FullScreen:true
Sound:C:\DEMO\DEMO.WAV
SoundDelay:-2000
SoundRepeats:0
TypeFLI/FLC)
COMMAND1: caption:播放
COMMAND2: caption:停止
而源程序只有两行:
Sub Command3D1_Click ()
animation1.Play = True
End Sub
Sub Command3D2_Click ()
End
End Sub
注意例子中播放3DS的FLI/FLC文件必须在WINDOWS的SYSTEM的目录中载入播
放FLI/FLC动画文件的动态连接库AAPLAY.DLL。
这样我们就实现了一幅影音同步的多媒体作品,是不是很简单?不要再犹豫
了,赶快上机试一下,你会叹服于VBPLAY.VBX的强大功能。

在VB应用程序中恰当的使用声音

众所周知,Visual Basic是功能非常强大的多媒体开发工具,它有丰富的
函数和方法处理各种各样的多媒体信息,能够很灵活的操作图形、声音、动画、
影象等多媒体素材。但有时我们使用Visual Basic开发非多媒体应用程序,并不
需要在应用程序中大量的使用声音,而只是需要在特定的场合出现。如Windows的
警告声。这就要求程序员在恰当的环境中恰当的使用声音文件,既不失去VB在多媒
体方面的特长,又能够为应用程序增加吸引人的效果。
VB可以用于输出声音的方法很多,归结一下,大概有以下四种:
1.利用Beep语句。
这是VB系统提供的一条利用计算机扬声器发声的语句,它只能够发出简单的蜂
鸣声,但在应用程序中大量用于输出警告的信息。如下例允许用户在文本框中输入
数字,当用户输入错误时,系统会报警提示。
Sub Text1_KeyPress (keyascii As Integer)
If keyascii <48 Or keyascii> 57 Then
Beep:Beep: Beep
keyascii = 0
End If
End Sub
2.其实计算机的蜂鸣器也可以发出不同频率、音高的声音,从而奏出美妙的
音乐。方法是调用Windows的一些有关发声的API函数。Windows系统包含十六个
声音函数,它们都存放在Windows的SOUND.DRV这个驱动程序所包含的动态连接库
中。其中最常用的四个函数是OpenSound,CloseSound,SetVoiceNote,Start-
Sound。其声明格式如下:
Declare Function OpenSound Lib "Sound" () As Integer
Declare Sub CloseSound Lib "Sound" ()
Declare Function SetVoiceNote Lib "Sound" (ByVal nVoice As
Integer, ByVal nValue As Integer, ByVal nLength As Integer, ByVal
nCdots As Integer) As Integer
Declare Function StartSound Lib "Sound" () As Integer
在Visual Basic的通用过程中声明上述函数后,就可以象使用Visual Basic
自己的函数一样使用Windows的API函数。
下面给出一个例子,只需要在窗体中放置7个按钮组成的控件数组,调用上述
函数就可以简单的实现准确的音阶:
Sub Command1_Click (index As Integer)
a% = OpenSound()
Select Case index
Case 0: f = 37
Case 1: f = 39
Case 2: f = 41
Case 3: f = 42
Case 4: f = 44
Case 5: f = 46
Case 6: f = 48
End Select
m1% = SetVoiceNote(1, f, 4, 0)
m2% = StartSound()
End Sub
3.Visual Basic是第一个支持对象连接与嵌入(OLE)的开发工具,利用
OLE可以简单的在应用程序中插入声音文件。这也是使用Visual Basic开发多
媒体软件常用的方法。使用过VB的读者都知道,VB的ToolBox中就有OLE2.0控
件。当我们双击OLE2.0控件时,会弹出“Insert Object”窗口,在窗口中选
择对象类型Object Type为声音文件,选择“Create from File”,指定硬盘
上声音文件的位置,同时确认Link方式。这些步骤其实是在设置OLE2.0的属性。
通过按F4打开Properties属性窗口,设置其中的Class、SourceDoc、SourceItem
等属性也可完成这一工作。按F5运行程序,双击OLE对象时就会发声。与播放各
种声音文件相关的属性为Action,通过设置Action属性可以打开、驱动、删除
相应的声音对象。如下例在窗体装入时调用声音文件:
Sub Form_Load ()
ole1.Class = "soundrec"
ole1.SourceDoc = "c:\windows\ding.wav"
ole1.Action = 1
ole1.Action = 7
End Sub
4.利用Visual Basic的多媒体控件MCI.VBX。
使用MCI.VBX是Visual Basic开发多媒体软件的主要方法。利用MCI.VBX
在应用程序中加入声音文件是轻而易举的事。有大量的专著介绍MCI.VBX的使
用方法,这里就不在赘述。
总的说来,以上四种方法的复杂程度依次递增,对系统的要求和消耗的系
统资源也越来越大。因而,作为一个VB程序员,在应用程序中,应该能够熟练
而准确的使用上述四种方法并在恰当的场合选择某一种方法,就可以为自己的
程序增添效果同时并不使软件显得华而不实。


如何创建自定义的光标

当在设计一个应用程序时,Visual Basic允许程序员将许多控件
的MousePointer属性设计成12个预先定义好的鼠标光标之一。典型情
况是程序员希望改变一个控件的MousePointer属性,以告诉程序的用
户有某种类型的行为被进行了。例如,沙漏光标被用来指示一个消耗
时间的过程。另外,可以改变光标来仅仅通知用户他已经将鼠标的指
针指向了一个特殊的控件,如一个文件列表框。要做到这些,程序员
只需要简单地在Visual Basic程序中在适当时刻改变该控件的Mouse-
Pointer属性即可。
然而,有些程序员或许会希望显示一个12个预定义形状中的光标
之外的光标。本文说明如何创建一个不同的鼠标指针(光标),包括
为一个没有MousePointer属性的控件创建光标。
改变光标(鼠标指针)
要在Visual Basic应用程序中将光标(鼠标指针)改变成个不同
的形状,可以添加代码来改变希望监视的控件的MouseMove和DragOver
事件。
MouseMove事件所包含的代码用于触发该控件的Drag方法。当鼠标
在被选中的控件上移动的时候,轮流显示新的鼠标指针。当鼠标指针离
开该控件时,则DragOver事件被触发。在Visual Basic程序中,可以
重新复位此Drag属性,以便以前的鼠标指针能够被再次显示出来。
样例程序
下面的程序实现当鼠标指针移动到一个文件列表框控件上时,将其
改变成不同的形状。
在Visual Basic中开始一个新的工程,采用缺省的方法建立Form1。
在Form1上添加一个文件列表框控件,采用缺省的方法建立File1。
将File1控件的DragIcon属性设置为所选择的.ICO文件。
将如下代码添加到File1的MouseMove事件中:
Private Sub File1_MouseMove(ButtonAs Integer, Shift As Integer,
X As Single, Y As Single)
File1.Drag 1 'icon on
End Sub
将如下代码添加到Form1的DragOver事件中:
Private Sub Form_DragOver(Source As Control, X As Single, Y
As Single, State As Integer)
File1.Drag 0 'icon off
End Sub
按下F5功能键执行此程序。得到的运行结果是:将鼠标指针移动到该
文件列表框控件上时,程序将把所选中的.ICO文件作为缺省的鼠标光标;
将鼠标指针离开该控件时,光标则会自动恢复为缺省的形状。

用VB进行多媒体程序设计初步
VB(Visual Basic)具有很强的多媒体处理控制功能,VB的多媒体控制
MCI(Media control interface)包括一套控制音频和视频设备但具有与设
备无关的命令,用它来进行多媒体设计是很方便的。比如:你也许想拥有一
个自己编写的CD播放器,那么利用VB的MCI只需写几行代码就可
生成一个功能比较齐全的CD播放器。下面简单谈谈用VB的MCI进行多媒
体设计的初步知识并给出一个非常简单的CD播放器的例子。
在使用MCI之前必须安装好多媒体设备如声卡、CD—ROM等以及这些设备
的驱动程序,否则MCI将不听指挥。
一、MCI控制的安装
MCI控制在VB不同版本中的安装方法是不一样的。在VB 3.0专业版中,
MCI控制文件为MCI.VBX,在VB 4.0中MCI控制文件为MCI16.OCX(16位)、
MCI32.OCX(32位)。一般情况下MCI控制在启动VB之后并没有加入到工具箱中
(TOOLBOX),需要自己动手安装它。
1.VB 3.0中MCI的安装。
打开VB的FILE菜单,选择Add File项,从Windows\system目录下找到MCI.
VBX,选择OK即可,这时你将发现TOOLBOX最后又多了一个工具,这就是MCI。如
果你经常要用它,建议在VB目录下找到Autoload.mak文件,用字处理软件打开它,
把MCI.VBX添加在其中,这样每次启动VB时就将其自动调入。
2.VB 4.0中MCI的安装。
VB 4.0支持16位和32位两种系统,在WINDOWS 3.1下只能使用16位系统。MCI
不能和VB 3.0中一样用Add File调入,如果你这样做将会发现系统提示错误,
需在Autoload.mak文件中调入。笔者打开Autoload.mak文件后发现调用格式为:
OBJECT={序列号}#1.0#0;文件名,不知道MCI16.OCX的序列号是无法安装的。
幸好在VB目录下的子目录SAMPLE下有一个MCI的子目录,进入它可以看到有一个
MCITEST.MAK文件,打开它可以看到有:Object={C1A8AF28-1257-101B-8FB0-
0020AF039CA3}#1.0#0;MCI32.OCX一行(也许您的序列号不一定和这相同),
将这一行复制到Autoload.mak文件中即可。由于本人使用的是WINDOWS 3.1,在
安装VB 4.0时32位系统无法装入,硬盘中根本没有MCI32.OCX文件,VB何以将
MCI32.OCX调入呢?经试验发现VB以序列号选择文件,可能上述序列号是MCI16.OCX
文件的序列号,进一步试验发现即使将序列号后面的MCI32.OCX去掉也可调入,这进
一步说明了VB 4.0中一个OCX文件有一个对应的序列号,因此绝对不能改变序列号,
否则将无法正确调入所需的文件。MCI安装完毕,用鼠标双击工具箱的MCI图标,
如果在Form中出现9个熟悉的按扭,那么安装就成功了。
 
二、MCI的属性和事件
MCI提供许多关于MCI控制方面的属性和事件。比较常用的属性有:
Button visible 决定该按钮在MCI控制中是否可见。
Command 要执行的MCI命令,如Open Close Play Stop Eject等。
Device Type 要打开的MCI设备类型,如动画播放设备、MIDI序列发生器、
激光视盘机、WAV文件播放器、录相机等。
Filename 使用Open命令打开或Save命令保存的文件名。
Length 确定一个文件或CD唱片的长度。
Track 指定特定的轨道,供Tracklength和Trackposition使用。
Tracks 当前MCI设备的轨道数。
Tracklength 在当前时间格式下,传回Track所指轨道的时间长度。
Trackposition 在当前时间格式下,传回Track所指轨道的起始位置。
Visible 决定在运行时刻多媒体MCI控制是否可见。
比较常用的事件有:
Buttonclick 当用户在多媒体MCI控制的按钮上按下或释放鼠标时产生该事件,
每一个Buttonclick事件缺省执行一个MCI命令。
Buttoncompleted 当多媒体MCI控制按钮激活的MCI命令完成后发送。
Statusupdate 这个事件可监测目前多媒体设备的状态信息,比如用滚动条来
表示当前轨道的位置。
详细的属性和事件的用法请参看控制帮助文件。
 
三、CD播放器的例子
对初学者来说,能利用入门知识编写一个的成功小程序是很鼓舞人心的,下面
我们来编写一个非常简单的例子:迷你CD播放器。
在MCI调入Toolbox之后,双击MCI工具,将会在Form中出现9个按钮,用鼠标
移动这些按钮至合适的位置,然后双击Form窗体,把下面的代码加入到事件中:
Sub Form_Load()
MMControl1.DeviceType = “CDaudio" 'MCI设备类型为CD唱片
MMControl1.Command = “open" '打开设备
End Sub
Sub Form_Unload(Cancel As Integer)
MMControl1.Command = “close" '退出时关闭MCI设备
End Sub
保存文件,在CD驱动器中放入一张CD唱片,然后运行,你将发现九个按钮中
Prev、Next、Play、Eject四个按钮变黑(有效状态),点一下Play按钮,音乐
出来了!若驱动器中无CD盘则所有按钮都处于无效状态。这样一个简易CD播放器
就完成了,它具有四种功能,但自己动手写的代码只有上面加注释的三行。这个
CD播放器有点太简单了,下面就看你的了,你可以加入一些文字信息如开发时间、
作者、版权等,再进一步学习MCI可加入其他功能如显示播放时间、曲目等。



播放资源文件文件中的声音

VB 提供的方法使我们可以很容易地使用资源文件中的字符、图片等
资源。我们可以用以下方法播放资源文件中的 wav 声音:
首先,在你的资源文件的源文件 (RC) 文件加入下面一行:
MySound WAVE c:\music\vanhalen.wav
然后将其编译为 RES 文件。最后使用下面的声明及代码:
Private Declare Function PlaySound Lib _ "winmm.dll" Alias "PlaySoundA" ( _ ByVal lpszName As String, _ ByVal hModule As Long, _ ByVal dwFlags As Long) As Long
Private Const SND_ASYNC& = &H1
Private Const SND_NODEFAULT& = &H2
Private Const SND_RESOURCE& = &H40004
Dim hInst As Long
Dim sSoundName As String
Dim lFlags As Long
Dim lRet As Long
Private Sub Command1_Click()
hInst = App.hInstance
sSoundName = "MySound"
lFlags = SND_RESOURCE + SND_ASYNC + _ SND_NODEFAULT
lRet = PlaySound(sSoundName, hInst, lFlags)
End Sub

播放背景音乐
声明:
Declare Function MCISendString& Lib "MMSYSTEM" (ByVal LPSTRCOMMAND$, ByVal LPSTRRETURNSTR As Any, ByVal WRETURNLEN%, ByVal HCALLBACK%)
开始播放:
R% = MCISendString&("OPEN EXAMPLE.MID TYPE SEQUENCER ALIAS NN", 0&, 0, 0)
R% = MCISendString&("PLAY NN FROM 0", 0&, 0, 0)
R% = MCISendString&("CLOSE ANIMATION", 0&, 0, 0)
停止:
R% = MCISendString&("OPEN EXAMPLE.MID TYPE SEQUENCER ALIAS NN", 0&, 0, 0)
R% = MCISendString&("STOP NN", 0&, 0, 0)
R% = MCISendString&("CLOSE ANIMATION", 0&, 0, 0)
其中EXAMPLE.MID 为播放的文件,NN为自定义名称标志。

在VB6中播放MP3文件

MP3自问世以来,因其声音还原好,压缩比率高而深受欢迎。目前,市面上
有很多种MP3播放器供用户选择使用。但是,怎样在自己的应用程序中播放MP3
文件呢?最近,本人在网上下载了一个播放MP3文件的ActiveX控件——mp3play.ocx,
该控件可在VB5.0、Delphi 3.0及VC5.0中使用。下面将使用该控件在VB5.0中播放
MP3文件的方法介绍给大家。
先启动VB5.0,添加一个新窗体到工程中。单击“工程”*“部件”菜单,将下
载的mp3play.ocx控件添加到VB中。此时,在工具箱中将可以看到新增加了一个蓝色
小喇叭图标,这就是mp3play.ocx控件。
单击工具箱中的MP3控件,将其添加到窗体中,名称设为MP3Play,属性Visible
设为False。
在窗体中添加“播放”命令按钮,其名称为btn_command1,属性Caption为
“播放”,在其Click事件中填写以下代码:
Private Sub btn_command1_Click()
MP3Play.Open(“c:\pop_music\ 心 太 软.mp3”,“ ”) // 指定所
要播放MP3 文件所在的位置为C盘pop_music 目录里
MP3Play.play
End Sub
在窗体中添加“停止”命令按钮,其名称为btn_command2,属性Caption为
“停止”, 在其Click事件中填写以下代码:
Private Sub btn_command2_Click()
MP3Play.Stop
End Sub
执行该程序,单击“播放”按钮,将播放您指定的MP3音乐。若要停止,单击
“停止”按钮即可。
该控件可直接从光盘上下载。

巧用VB编程使XMPLAYER自动播放VCD

XingMPEG Player是软解压播放VCD的优秀软件,但调入XM?player、进入播
放状态、隐藏面板等一系列操作,需要多次点击鼠标,较为麻烦。下面用VISUAL
BASIC程序首先检查光驱是否准备好或光驱中是否为 VCD光碟,然后利用VB模拟XingMPEG
的键盘动作,通过短短的几行程序,实现 VCD光盘的自动播放。
①进入VB环境,设置窗体FORM1的Visible属性为 False,然后在窗体上建立
一个驱动器列表框Drivel,亦设其Visible属性为FALSE,以使窗体和列表框在程
序调入时不被显示出来。其它属性均取默认值。
②双击窗体,编写过程代码
Private Sub Form-Load()
On Error GoTo finderr ′检查光驱是否准备好或光驱中是否为VCD光碟
startline:
drvnmb=Drive1?ListCount
cdname$=Drive1?List(drvnmb-1)
files$=Dir$(cdname$ & "\mpegav\*.dat")
If files$=""Then GoTo finderr
act=Shell("C:\Program Files\Xmplayer\XMPLAYER.EXE",1)
′假定Xmplayer位于该目录,打开并使之获得焦点
SendKeys "%(fv)",True ′模拟Ctrl+fv键盘动作,开始播放VCD
PauseTime=2 ′一些VCD光碟因制作不规范,播放前会提示有一些错误,为对
这些错误作出处理,所以暂停若干秒,此暂停是在后台进行,不影响正常 VCD连
续播放
start=Timer
Do While Timer<start+PauseTime
Loop
SendKeys"{enter},^s,^p,^{f4},%{esc},^4",True ′模
拟其它键盘动作,满屏播放,隐藏面板等
End
finderr:
msg$="光驱未准备好,或光驱中非VCD光盘,将光驱准备好,"
msg$=msg$ & "或换一张光盘,然后回车重试,或按取消退出"
er=MsgBox(msg$,53,"出错提示")
If er=4 Then Resume startline Else En ′由用户选择重试或退出
End Sub
③将上述程序编译成EXE文件,然后将其快捷方式拖至桌面,双击该图标,即
可装入Xing MPEG Player并自动开始满屏播放VCD,同时置PLAYER面板于Standard
Bar状态,并将之隐藏。程序中^表示Ctrl,%表示Alt,之所以程序中要连续插入暂
停“^S”和播放“^P”两个动作,是因为2?0版本的VCD在按Alt+FV后即开始播放,
1?0版本在按Alt+FV后还要求按Ctrl+P,而Ctrl+P在播放状态下又等价于Ctrl+S
(即暂停),所以如果只有一个“^P”则使VCD1?0开始播放而VCD2?0暂停,为了
兼顾两种版本的VCD,首先模拟Ctrl+S动作实现暂停,然后再模拟 Ctrl+P开始播放,
从而使两种版本的 VCD在执行本程序后都能实现自动播放。
上述程序在PWIN95、VISUAL BASIC 4.0和XingMPEG PLAYER 3.2环境中调试通过。

如何播放 .wav 声音文件?
利用多媒体的 mciSendString API 函数, 再搭配 mci(multimedia control
interface) 指令, 即可播放 .wav 声音文件, 细节如下:
1. API 的声明:
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
注:如果以上的声明放在「一般模块」底下, 应将 Private 保留字去掉。
2. 程序范例:
' 撰写播放声音的一副程序
Sub PlaySound(filename)
Dim cmd As String
Call mciSendString("close MyWav", 0, 0, 0) ' MyWav 这个名称可依
需要来修改
cmd = "open " & filename & " type WAVEAudio alias MyWav"
Call mciSendString(cmd, 0, 0, 0)
Call mciSendString("play MyWav", 0, 0, 0)
End Sub
' 假设要拨放 "c:\windows\Tada.wav"
PlaySound "c:\windows\Tada.wav"

如何连续播放 .wav 声音文件?
叁考 上一技巧, 并且在表单上布置一个 Timer 控制文件、将 Interval
属性设定成 100(表示 0.1 秒), 然后撰写 Timer1_Timer 事件程序,如下:
Private Sub Timer1_Timer()
Dim retStr As String * 80
Call mciSendString("status MyWav mode", retStr, 80, 0)
If Left(retStr, 7) = "stopped" Then ' 如果停止了
PlaySound "c:\windows\Tada.wav" ' 重复播放
End If
End Sub

如何播放 .flc 动画档?
播放 .flc 动画文件的方法与 .wav 及 .midi 并没有什么不同,最后完成的
程序大致如下:
Sub PlaySound(filename)
Dim cmd As String
Call mciSendString("close MyFlc", 0, 0, 0) ' MyFlc 这个名称可
依需要来修改
cmd = "open " & filename & " alias MyFlc"
Call mciSendString(cmd, 0, 0, 0)
Call mciSendString("play MyFlc", 0, 0, 0)
End Sub
注:有些机器可能会因为没有安装 .flc 的驱动程序而无法播放,欲检查机器
中是否安装有播放 .flc 的驱动程序, 可先利用 Windows 提供的媒体播放程
序播放 .flc 文件看看。

如何将 .flc 动画档放在某一个 hWnd 之中播放?
上一技巧, 会开启独立的窗口来播放 .flc 动画档, 如何将它放在某一个 Form 或 PictureBox 之中播放?
假设我们想将 .flc 放在 Picture1 之中播放, 则必须将 open MCI 指令由原先的:
"open " & filename & " alias MyFlc"
改成:
"open " & filename & " alias MyFlc parent " & Picture1.hWnd & " style " & WS_CHILD
则 .flc 就会在 Picture1 之中播放。
注:WS_CHILD 等于 &H40000000。
[Move]认识你,才知道有一份心情叫依恋,有一种感觉叫思念,有一句誓言叫偕老![/COLOR][/FONT][/SIZE][/Move]
返回列表