1

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

4

1 回答 1

0

你试过改变吗

cmd = "Open test.mp3 type mpegvideo alias Mp3File"

cmd = "Open test.mp3 type mpegvideo alias MediaFile"?

看看这篇关于 CodeProject 的文章,它使用 .NET 和 Winmm.dll 来播放 MP3 文件:

“MP3 助手类 - http://www.codeproject.com/Articles/95000/MP3-Helper-Class”

于 2012-12-08T07:01:55.717 回答