VB6.0で
playsound関数で音を鳴らすと鳴ってる間はキーボードの
入力さえ受け付けません。鳴り止むと普通に戻ります。
対処方法を教えて下さい。他の関数で良いのがあればそれも。
現在以下のように使用しています。
Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
Call PlaySound("C:********.wav ", 0, 0)
PlaySoundの第3引数に 0 即ちSND_SYNCを指定すると、
サウンドの再生が完了した後で制御を返します。
なので、
> playsound関数で音を鳴らすと鳴ってる間はキーボードの
> 入力さえ受け付けません。鳴り止むと普通に戻ります。
という動きになります。
非同期で再生場合は、SND_ASYNCを指定します。
Private Const SND_ASYNC = &H1 ' play asynchronously
Private Const SND_SYNC = &H0 ' play synchronously (default)
なるほど 第3引数を1にすれば非同期になるんですね。
ありがとうございます。
この場合、連続して再生する場合、前の音は消されてしまうのは
仕方ないのでしょうか? 非同期でPLAYSOUNDで呼ばれた音は遅れても
構わないので確実に全て再生したいのですが難しいですか?
> http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpmltimd/html/_win32_playsound.asp
を読んでもらえればわかるとおもうのですが
SND_ASYNC Or SND_NOSTOP
を指定すれば、前のサウンドが流れている場合再生されないようになります。
Private Const SND_NOSTOP = &H10 ' don't stop any currently playing sound
ただし、
> 非同期でPLAYSOUNDで呼ばれた音は遅れても構わない
は、結構面倒そう。遅れてでも再生させるとなると、再生できなかったという情報を持って、
それをタイミングよく再生させないといけないですからね。
(PlaySound関数の戻り値とTimerを使うのかなぁ)
ツイート | ![]() |