我想在默认声卡以外的声卡上播放MP3(例如我插入USB耳机)。
如果我想在不同的声卡上播放WAV文件,我的代码可以正常工作。但是对于MP3,它只是失败了。我试图用C#编写代码,但是为了在app和WinAPI之间没有任何东西(例如interop),我把它翻译成了VB6。具体来说,失败的是改变声卡的调用 - mciSendCommand - 它失败了,错误274 - The MCI device you are using does not support the specified command
。 MCI类型操作的顺序通常如下:打开文件,执行操作(例如更换声卡等),然后播放。
Dim cmd as String
Dim rc as Long
Dim lngDeviceID As Long
Dim parms As MCI_WAVE_SET_PARMS
cmd = "Open test.mp3 type mpegvideo alias Mp3File"
rc = mciSendString(CommandString, vbNullString, 0, 0&) ' Open works
lngDeviceID = mciGetDeviceID("Mp3File")
parms.wOutput = 1 ' tell it to playback on the 2nd card
rc = mciSendCommand(lngDeviceID, MCI_SET, MCI_WAVE_OUTPUT, parms) ' FAILS with 274
If (rc <> MMSYSERR_NOERROR) Then
' The command failed.
MsgBox "Change card: " & GetMCIErrorString(rc)
End If
有趣的是,如果我想播放WAV文件,我必须使用waveaudio
而不是mpegvideo
(就像这个cmd = "Open test.mp3 type waveaudio alias WAVFile"
)打开它,一切正常。但无论我尝试什么,如果我尝试打开一个MP3文件将无法正常工作。
我错过了什么?我已经看过十几个未回答的问题可以追溯到2000年 - 必须有一种方法可以在不同的声卡上播放MP3文件。
答案 0 :(得分:0)
你有没有尝试过改变
cmd = "Open test.mp3 type mpegvideo alias Mp3File"
到
cmd = "Open test.mp3 type mpegvideo alias MediaFile"
?
查看有关使用.NET和Winmm.dll播放MP3文件的CodeProject的这篇文章:
"MP3 Helper Class - http://www.codeproject.com/Articles/95000/MP3-Helper-Class"