0

Visual Basic 2008 でプログラムを作成しています。さまざまな音量のさまざまな種類のサウンドが必要です。したがって、 My.Computer.Audio.Play は有効なオプションではありません。

代わりに mciSendString を使用することにし、次のコードを見つけました

Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
(ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _
ByVal uReturnLength As Integer, ByVal hwndCallback As Integer) As Integer

    mciSendString("close myWAV", Nothing, 0, 0)
    Dim fileName1 As String = 
    mciSendString("open " & fileName1 & " type mpegvideo alias myWAV", Nothing, 0, 0)
    mciSendString("play myWAV", Nothing, 0, 0)

    'min Volume is 1, max Volume is 1000
    Dim Volume As Integer = (SFXVolume * 100)
    mciSendString("setaudio myWAV volume to " & Volume, Nothing, 0, 0)

今、私がテストしたこのコードは、filename1 = "C://Correct.wav" の場合に完全に機能しています。

しかし、私が使用するとき

filename1 = My.Application.Info.DirectoryPath & "\Correct.wav"

まったく音が出ません。

これが機能するようにコードを修正してください。前もって感謝します。

4

3 に答える 3

1

DirectoryPathスペースmciSendStringがあるとコマンドを正確に認識できない場合は、パスを引用符で囲む必要があります。

mciSendString(
    String.Format("open ""{0}"" type mpegvideo alias myWAV", fileName1), Nothing, 0, 0)

Hans が示唆するように、必ず返品ステータスも確認してください。

DirectoryPathまた、末尾にバックスラッシュがあるかどうかがわからないため、ディレクトリと名前から完全なパスを生成する正確な方法は次のとおりです。

fileName1 = System.IO.Path.Combine(My.Application.Info.DirectoryPath, "Correct.wav")
于 2013-05-20T13:01:27.240 に答える
1

再生用にファイルを開く前にPrivate Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Longthenを使用 します。SetCurrentDirectory filepathそれは私のために働いています。

于 2016-10-09T13:32:13.607 に答える
0

ファイル パスを WINMM.DLL に渡すには、DLL Call GetShortPathName を使用する必要があります。lpszLongPath はフル パス文字列で、短いパス名が lpszShortPath に渡されます。cchbuffer は実際には 200 程度に設定する必要がありますが、ほとんどの場合、返される文字列ははるかに短くなります。VB パディング文字列を使用する必要があります。

Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String、ByVal lpszShortPath As String、ByVal cchBuffer As Long) As Long

バッチ midi ファイル読み取りプログラムで mciSendString 呼び出しを使用して、3642 個の midi ファイルを開き、著作権、タイトル、および再生時間の文字列を実際に非常に迅速に返しました。

よろしく デビッド・R・リーチ

于 2014-01-14T17:14:57.783 に答える