Sub PlayWaveSound(fn$)
  sndPlaySound 0&, SND_ASYNC ‘stop sound
  DoEvents
  sndPlaySound fn$, SND_ASYNC Or SND_NODEFAULT 'playsound
  DoEvents
End Sub上面的代码有时不能停止正在播放的声音,为什么?

解决方案 »

  1.   

    Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long
    Private Declare Function sndStopSound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszNull As Long, ByVal uFlags As Long) As LongPrivate Declare Function midiOutClose Lib "winmm.dll" (ByVal hMidiOut As Long) As Long
    Private Declare Function midiOutOpen Lib "winmm.dll" (lphMidiOut As Long, ByVal uDeviceID As Long, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal dwFlags As Long) As Long
    Private Declare Function midiOutShortMsg Lib "winmm.dll" (ByVal hMidiOut As Long, ByVal dwMsg As Long) As Long   
    Private Const SND_MEMORY = &H4
    Private Const SND_SYNC = &H0
    Private Const SND_ASYNC = &H1
    Private Const SND_NODEFAULT = &H2
    Private Const SND_LOOP = &H8
    Private Const SND_NOSTOP = &H10Dim hMidiOut As Long
    Dim aWave() As Byte
    Dim aMidi() As Byte
    Private Function PlayWave() As Boolean
        Dim r        As Long
        Dim uFlags   As Long
                
        uFlags = SND_ASYNC Or SND_NODEFAULT Or SND_MEMORY Or SND_LOOP
        r = sndStopSound(0, SND_ASYNC)
        
        r = sndPlaySound(aWave(0), uFlags)
        
    End Function
    我这样写的,可以停止播放
    参考一下
      

  2.   

    跟你写的不是一样吗?MSDN上写 sndPlaySound 0&, SND_ASYNC 就是停止声音,可是实际使用时,有时可以立即停,有时却不行
      

  3.   

    SND_APPLICATION  用应用程序指定的关联来播放声音。 
    SND_ALIAS  pszSound参数指定了注册表或WIN.INI中的系统事件的别名。 
    SND_ALIAS_ID  pszSound参数指定了预定义的声音标识符。 
    SND_ASYNC  用异步方式播放声音,PlaySound函数在开始播放后立即返回。 
    SND_FILENAME  pszSound参数指定了WAVE文件名。 
    SND_LOOP  重复播放声音,必须与SND_ASYNC标志一块使用。 
    SND_MEMORY  播放载入到内存中的声音,此时pszSound是指向声音数据的指针。 
    SND_NODEFAULT  不播放缺省声音,若无此标志,则PlaySound在没找到声音时会播放缺省声音。 
    SND_NOSTOP  PlaySound不打断原来的声音播出并立即返回FALSE。 
    SND_NOWAIT  如果驱动程序正忙则函数就不播放声音并立即返回。 
    SND_PURGE  停止所有与调用任务有关的声音。若参数pszSound为NULL,就停止所有的声音,否则,停止pszSound指定的声音。 
    SND_RESOURCE  pszSound参数是WAVE资源的标识符,这时要用到hmod参数。 
    SND_SYNC  同步播放声音,在播放完后PlaySound函数才返回。 要停止当前声音 用  sndPlaySound "",SND_ASYNC  应该ok了 .