热情软件屋

 

编写多媒体播器时,怎样才能实现遁环播放


编号: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回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio