翻译|其它|编辑:郝浩|2004-03-11 12:50:00.000|阅读 1573 次
概述:
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
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 |
Type:(FLI/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,StartSound。其声明格式如下: |
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程序员,在应用程序中,应该能够熟练而准确的使用上述四种方法并在恰当的场合选择某一种方法,就可以为自己的程序增添效果同时并不使软件显得华而不实。 |
点到即播的多媒体点播机 |
现在用光盘发行的游戏,有很多以后辍名为.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 提供的方法使我们可以很容易地使用资源文件中的字符、图片等资源。我们可以用以下方法播放资源文件中的 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 |
在VB5中播放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的优秀软件,但调入XMplayer、进入播放状态、隐藏面板等一系列操作,需要多次点击鼠标,较为麻烦。下面用VISUAL BASIC程序首先检查光驱是否准备好或光驱中是否为 VCD光碟,然后利用VB模拟XingMPEG的键盘动作,通过短短的几行程序,实现 VCD光盘的自动播放。 |
①进入VB环境,设置窗体FORM1的Visible属性为 False,然后在窗体上建立一个驱动器列表框Drivel,亦设其Visible属性为FALSE,以使窗体和列表框在程序调入时不被显示出来。其它属性均取默认值。 |
②双击窗体,编写过程代码 |
Private Sub Form-Load() |
On Error GoTo finderr ′检查光驱是否准备好或光驱中是否为VCD光碟 |
startline: |
drvnmb=Drive1ListCount |
cdname$=Drive1List(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”两个动作,是因为20版本的VCD在按Alt+FV后即开始播放, 10版本在按Alt+FV后还要求按Ctrl+P,而Ctrl+P在播放状态下又等价于Ctrl+S(即暂停),所以如果只有一个“^P”则使VCD10开始播放而VCD20暂停,为了兼顾两种版本的VCD,首先模拟Ctrl+S动作实现暂停,然后再模拟 Ctrl+P开始播放,从而使两种版本的 VCD在执行本程序后都能实现自动播放。 |
如何播放 .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 放在 Picture1 之中播放, 则必须将 open MCI 指令由原先的: |
"open " & filename & " alias MyFlc" |
改成: |
"open " & filename & " alias MyFlc parent " & Picture1.hWnd & " style " & WS_CHILD |
则 .flc 就会在 Picture1 之中播放。 |
注:WS_CHILD 等于 &H40000000。 |
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com