编写多媒体播器时,怎样才能实现遁环播放
编号:QA003450
建立日期: 2000年10月24日 最后修改日期:2000年10月31日
所属类别:
Feng:
操作系统: win98
编程工具: vb6.0
问题: 我在使用 MMControl这个控件编写多媒体播器时,怎样才能实现遁环播放?
水平: 刚入门
回答:
一个专用的API函数,SndPlaySound(), 此函数是一个可独立播放WAV 语音文件的函数, 使用相对来说较为简单,无需使用MMControl,下面的例子可直接播放TEST.WAV文件:
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
i=SndPlaySound("test.wav",SND_LOOP),最后一个参数可设置。SND_LOOP表示遁环播放。更具体的说明可查阅MSDN,成功的话返回 true。
利用多媒体的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. 程序范例:
'自定义过程PlaySound
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"
在表单上布置一个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
主持人注:实际上有更简单的方法,只要使用API函数mciSendCommand时在命令后加上repeat就可以实现遁环播放。如
mciSendString "play mov notify repeat", 0, 0, hWnd
就可以实现重复放映电影。
T1000的意见:
MMControl在媒体文件播放完毕之后会产生一个ONNotify事件,你可以把重播的代码写到该事件中。
此问题由hjh回答。
| |
|
|
| |
|
|