改变声卡和播放MP3

时间:2012-12-08 05:31:56

标签: c# c++ winapi vb6 mci

我想在默认声卡以外的声卡上播放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文件。

1 个答案:

答案 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"