我正在使用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”

我没有声音播放。

谁能帮助我更正我的代码,以便此工作。
先感谢您。

最佳答案

如果您的DirectoryPath带有空格,则mciSendString将无法准确识别该命令,您需要在路径两边加上引号:

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

一定要像汉斯建议的那样检查返回的状态。

另外,由于您不知道DirectoryPath是否带有反斜杠,因此从目录和名称生成完整路径的准确方法是:
fileName1 = System.IO.Path.Combine(My.Application.Info.DirectoryPath, "Correct.wav")

关于vb.net - mciSendString/winmm.dll-播放音频文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16649299/

10-10 13:11