-1

PlaySound() を使用して .wav ファイルを再生するにはどうすればよいですか? PlaySound(sound) がありますが、「Argument not optional」というエラーが表示され続けます。

また、サウンドの再生を停止するにはどうすればよいですか?

4

1 に答える 1

4

あなたの質問にはコードが表示されていないので、何が間違っているのかを推測する必要があります.

まず、PlaySoundVB 6 コードで関数を正しく宣言する必要があります。

Public Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" _
    (ByVal lpszName As String,                                       _
     ByVal hModule As Long,                                          _
     ByVal dwFlags As Long) As Long

また、API ビューアー アプリケーションを使用して簡単に見つけることができるいくつかの定数が必要です。VB 6がインストールされていないため、Webから取得したリストを次に示します。

Private Const SND_APPLICATION As Long = &H80
Private Const SND_ALIAS As Long       = &H10000
Private Const SND_ALIAS_ID As Long    = &H110000
Private Const SND_ASYNC As Long       = &H1
Private Const SND_FILENAME As Long    = &H20000
Private Const SND_LOOP As Long        = &H8
Private Const SND_MEMORY As Long      = &H4
Private Const SND_NODEFAULT As Long   = &H2
Private Const SND_NOSTOP As Long      = &H10
Private Const SND_NOWAIT As Long      = &H2000
Private Const SND_PURGE As Long       = &H40
Private Const SND_RESOURCE As Long    = &H40004
Private Const SND_SYNC As Long        = &H0

これらのマジック ナンバーの意味や動作については、SDK のドキュメントを参照する必要があります。そこにいる間、関数のパラメーターの意味についても読む必要があります。取得しているエラーから、関数を間違って呼び出そうとしているようです。特に、3 つの引数の 1 つが省略されており、それらはすべて必須です (つまり、マークされていませんOptional)。

あなたが再生したいサウンドの種類や、サウンド ファイルがどこにあるのかわからないので、あなたの状況を完全に捉えた例を挙げることはできません。ただし、ディスク上のファイルからサウンドを再生するには、最初の引数としてサウンド ファイルへのフル パスを渡し、2 番目の引数には 0 を渡し (リソースからサウンドをロードしないため)、SND_FILENAME3 番目の引数には 0 を渡します。口論。

PlaySound "X:\Sounds\trumpet.wav", 0, SND_FILENAME

SND_ASYNCフラグを追加して、サウンドを非同期で再生することもできます。これは、関数がすぐに戻り、コードの残りの部分が実行されている間、バックグラウンドでサウンドを再生できることを意味します。これはデフォルトの動作ではなく、SND_SYNCフラグで明示的に実現されます。

また、フラグを追加して、SND_LOOP停止するまでサウンドを繰り返し再生させることができます。当然、これにもSND_ASYNCフラグが必要です。

すべてをまとめると、継続的にループし、非同期で再生されるサウンドが得られます。

PlaySound "X:\Sounds\trumpet.wav", 0, SND_FILENAME Or SND_ASYNC Or SND_LOOP

サウンドの再生を停止するには、最初の引数にヌル文字列を渡し (再生するサウンドを指定する必要がないため)、2 番目の引数に 0 を渡し、3 番目の引数に 0 を渡します (サウンドを再生しないため)。特別な動作が必要です):

PlaySound vbNullString, 0, 0

当然、これはSND_ASYNC最初にサウンドの再生を開始したときにフラグを渡した場合にのみ機能します。そうしないと、サウンドの再生が終了するまで制御がコードに戻らず、停止するものは何もありません!

于 2013-04-12T22:42:49.183 に答える