以下是王国荣、郑郁霖先生的文章,Copy下来当作自己的备忘录,本人对midi全然不知,
网友有问题时,请向他们询问。
利用多媒体的 mciSendString API 函数, 再搭配 mci(multimedia control interface) 指令, 即
可播放 .wav 声音档, 细节如下:
1. API 的宣告:
Declare Function mciSendString Lib "Winmm.dll" Alias "mciSendStringA"_
(ByVal Command As String,_
ByVal ReturnString As String,_
ByVal ReturnLength As Long,_
ByVal Callback As Long) As Long
Command : MCI 的命令字串
open = 开启设备:设备名 [type 设备型式][alias 别名]
close = 关闭设备:设备名
play = 播放档案:设备名 [from 起点][to 终点]
pause = 暂停档案
resume = 取消暂停档案
seek = 直接移到:设备名 [to 位置 | to start | to end]
stop = 停止拨放:设备名
2. 程式范例:
开启档案
Call mciSendString("open c:\wavs\3ucheng.mid waveaudio alias song",0,0,0)
播放音乐
Call mciSendString("play song",0,0,0)
' 撰写播放声音的一副程式
Sub PlaySound(filename)
Dim cmd As String
Call mciSendString("close MyWav", 0, 0, 0) ' MyWav 这个名称可依需要来修改
cmd = "open " & filename & " type WAVEAudio alias MyWav"
'去掉 上面中的 type WAVEAudio, 则该副程式便可用来播放 midi 音乐档。
Call mciSendString(cmd, 0, 0, 0)
Call mciSendString("play MyWav", 0, 0, 0)
End Sub
' 假设要拨放 "c:\windows\Tada.wav"
PlaySound "c:\windows\Tada.wav"
播放 .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 放在 Picture1 之中播放, 则必须将 open MCI 指令由原先的:
"open " & filename & " alias MyFlc" 改成:
"open " & filename & " alias MyFlc parent " & Picture1.hWnd & " style " & WS_CHILD
则 .flc 就会在 Picture1 之中播放。
注:WS_CHILD 等於 &H40000000。
撰写者: 郑郁霖三优工作室
BBS:漣三优资讯站漲 (04)246-3795 专业程式设计资源站
Declare Function sndPlaySound Lib "Winmm.dll" Alias "sndPlaySoundA" _
(ByVal SoundName As String, ByVal Flags As Long) As Long
稍做说明:
SoundName : 要播放的档名啦!
Flags : 播放方式。
为数值方式:
0 = 播放完才往下 RUN
1 = 边放边 RUN 程式
2 = 若档案不存在,将不发出警告讯息
4 = 先将档存於变数内,可避免延迟
8 = 重覆播放 (须配合 1 !)
可合并使用,如 Flags = 1 + 8
呼叫范例:
Call sndPlaySound("c:\wavs\3ucheng.wav", 1 + 8)
再来还有一个很重要的,就是关闭语音档!
Call sndPlaySound(vbNullString,0)