我想在默认声卡以外的声卡上播放 MP3(例如,我插入了 USB 耳机)。
如果我想在不同的声卡上播放 WAV 文件,我的代码可以正常工作。但是对于 MP3,它就失败了。我正在尝试用 C# 编写代码,但为了在应用程序和 WinAPI 之间没有任何内容(例如互操作),我将其翻译为 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 文件。