为什么用mcisendstring播放MP3时遇到中文的文件名时就不能播放啦而且也不能得到播放进度、当前播放状态等。?英文的倒是可以的。Private Sub play_Click()
Dim a As Long
a = mciSendString("close all", vbNull, 0, 0)
Debug.Print "1 " & GetMCIErrorString(a)
Debug.Print "2 " & ShortPathName(txtName.Text)
a = mciSendString("OPEN " & ShortPathName(txtName.Text) & " alias NOWPLAY type mpegvideo", 0&, 0, 0)
Debug.Print "3 " & GetMCIErrorString(a)
a = mciSendString("Play NOWPLAY", 0&, 0, 0) '这一句出现“指定的设备未打开,或不被 MCI 所识别。 ”的错误
Debug.Print "4 " & GetMCIErrorString(a)
txtLen.Text = GetMusicLen & " " & GetMusicTotalTime
Timer1.Enabled = True
'Probar.Min = 1
'Probar.Max = GetMusicLen
End Sub
这时的文件名为:F:\Music\Beyond\光辉岁月\光辉岁月.mp3(8。3:F:\Music\Beyond\光辉岁月\光辉岁月.mp3)而如果我用:F:\Music\BackStreet Boys\BackStreet Boys\Anywhere For You.mp3(8。3:F:\Music\BACKST~1\BACKST~1\ANYWHE~1.MP3)的文件名就可以正常播放。F:\Music\柏林之声\02_Live In America.mp3(8。3:F:\Music\柏林之声\02_LIV~1.MP3)这样的文件名也不能播放。F:\Music\Beyond\PARADISE\PARADISE[演奏版].mp3(8。3:F:\Music\Beyond\PARADISE\PARADI~1.MP3)这个文件也能播放。正常时的四句debug:
1 指定的命令已被执行。
2 F:\Music\Beyond\PARADISE\PARADI~1.MP3
3 指定的命令已被执行。
4 指定的命令已被执行。 不正常时的四句debug:
1 指定的命令已被执行。
2 F:\Music\Beyond\光辉岁月\光辉岁月.mp3
3 指定的命令已被执行。
4 指定的设备未打开,或不被 MCI 所识别。我列了怎么多文件名无非是想说,英文的文件名就可以播放(包括路径),包含中文的就不可以,但奇怪的是最后一个文件名中包含中文也能播放,各位有什么好的方法解决这个问题吗?还有一个情况,就是不用alias参数,而直接用文件名的话倒是可以播放,但还是不能得到播放进度、当前播放状态等。
Dim a As Long
a = mciSendString("close all", vbNull, 0, 0)
Debug.Print "1 " & GetMCIErrorString(a)
Debug.Print "2 " & ShortPathName(txtName.Text)
a = mciSendString("OPEN " & ShortPathName(txtName.Text) & " alias NOWPLAY type mpegvideo", 0&, 0, 0)
Debug.Print "3 " & GetMCIErrorString(a)
a = mciSendString("Play NOWPLAY", 0&, 0, 0) '这一句出现“指定的设备未打开,或不被 MCI 所识别。 ”的错误
Debug.Print "4 " & GetMCIErrorString(a)
txtLen.Text = GetMusicLen & " " & GetMusicTotalTime
Timer1.Enabled = True
'Probar.Min = 1
'Probar.Max = GetMusicLen
End Sub
这时的文件名为:F:\Music\Beyond\光辉岁月\光辉岁月.mp3(8。3:F:\Music\Beyond\光辉岁月\光辉岁月.mp3)而如果我用:F:\Music\BackStreet Boys\BackStreet Boys\Anywhere For You.mp3(8。3:F:\Music\BACKST~1\BACKST~1\ANYWHE~1.MP3)的文件名就可以正常播放。F:\Music\柏林之声\02_Live In America.mp3(8。3:F:\Music\柏林之声\02_LIV~1.MP3)这样的文件名也不能播放。F:\Music\Beyond\PARADISE\PARADISE[演奏版].mp3(8。3:F:\Music\Beyond\PARADISE\PARADI~1.MP3)这个文件也能播放。正常时的四句debug:
1 指定的命令已被执行。
2 F:\Music\Beyond\PARADISE\PARADI~1.MP3
3 指定的命令已被执行。
4 指定的命令已被执行。 不正常时的四句debug:
1 指定的命令已被执行。
2 F:\Music\Beyond\光辉岁月\光辉岁月.mp3
3 指定的命令已被执行。
4 指定的设备未打开,或不被 MCI 所识别。我列了怎么多文件名无非是想说,英文的文件名就可以播放(包括路径),包含中文的就不可以,但奇怪的是最后一个文件名中包含中文也能播放,各位有什么好的方法解决这个问题吗?还有一个情况,就是不用alias参数,而直接用文件名的话倒是可以播放,但还是不能得到播放进度、当前播放状态等。
解决方案 »
- 请教:VB中引用EXCEL控件
- 无法定位序数1132于动态链接库CRPE32.DLL上(水晶报表(8.0)打完包安装时,出现的问题)100分答谢,在线等待!!!!
- 如何在桌面上创建一个虚拟文件夹
- 关于SavePicture过程
- 怎么才能让DATAGRID控件中的小数点前的0显示出来呀?
- 请问哪里可以下载vsprinter控件,以及此控件的使用说明
- 请教高手!如何对现有记录集的数据进行统计计算?
- 斑竹和各路高手能帮我吗?
- 电脑病毒害得我好惨!!!请问一下文件宏病毒有没有损害???????
- 如何让名字显示多个,在线等,急!!!
- VB为什么不支持32Bit的图标
- DataReport自定义问题,急!!!高分相送!!
a = mciSendString("OPEN " & ShortPathName(txtName.Text) & " alias NOWPLAY type mpegvideo", 0&, 0, 0)
Public Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long'获取短文件名
Public Function ShortPathName(ByVal strPathName As String) As String
Dim lngLen As Long
Dim strTemp As String * 255
lngLen = GetShortPathName(strPathName, strTemp, 255)
ShortPathName = Left$(strTemp, lngLen)
End Function
'获取短文件名
Public Function ShortPathName(ByVal strPathName As String) As String
Dim lngLen As Long
Dim strTemp As String * 255
lngLen = GetShortPathName(strPathName, strTemp, 254)
ShortPathName = Left$(strTemp, InStr(1, strTemp, Chr(0)) - 1)
End Function
看来有时候也不能太相信API啊(我是指返回的lngLen这个值竟然不对的)
'获取媒体的长度(数值)
Public Function GetMusicLen() As Long
Dim RefStr As String * 80
mciSendString "status NOWPLAY length", RefStr, 80, 0
GetMusicLen = Val(RefStr)
End Function
'转换成HH:SS格式的代码
'获取MP3总长
public function gettotaltime() as string
intCount = Int(GetMusicLen / 1000)
strMin = Format$(Int(intCount / 60), "00")
strSec = Format$(intCount Mod 60, "00")
gettotaltime = strMin & ":" & strSec
end function
说明一点:当MP3的BitRate为112、128、192、320等标准BitRate时正确的,
但如果是230、240、168等等不规则的BitRate时就不正确,总是比正确的大了好多。另外请问怎么获取MP3的BitRate呢?
'获取MP3的比特率
Public Function GetMusicBitRate() As Long
Dim a As Long
Dim RefStr As String * 80
a = mciSendString("status NOWPLAY 这儿填什么呀?", RefStr, 80, 0)
Debug.Print "2 " & a & " " & GetMCIErrString(a)
GetMusicBitRate = Val(RefStr) / 1000
End Function最后一个问题,mp3play的ThreadEnded事件及ActFrame事件用mciSendString能实现吗?还是mp3play里根本就是用了TIMER控件或类似的API