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