2012-12-08 106 views
1

我想在聲卡以外的默認位置播放MP3(例如,我插入USB耳機)。更改聲卡並播放MP3

如果我想在不同的聲卡上播放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文件。

+0

這裏是一個ASM例如mybe它可以幫助你:HTTP:// WWW。 rohitab.com/discuss/topic/9205-play-mpeg-mp3-avi-probably/ – Jester

+0

這個傢伙戴夫看起來像他遇到了同樣的問題:http://www.itlisting.org/1-windows-media/911fe1683fd26cc4 .aspx –

+0

@Jester ASM示例不會更改mp3文件將播放的音頻設備。它只是播放文件。這部分對我來說確實很好。更改要播放它的設備 - 這是什麼不起作用。 – AngryHacker

回答

0

你試圖改變

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

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

看看這篇文章在CodeProject上使用.NET和WINMM.DLL播放MP3文件:

"MP3 Helper Class - http://www.codeproject.com/Articles/95000/MP3-Helper-Class"

+0

CodeProject是關於播放MP3文件,這完全沒有問題。問題在於改變聲卡(根據文檔)通過mciSendCommand命令完成,並且只要指定了'mpegvideo'類型就會失敗。別名並不重要(但爲了我後來嘗試失敗)。 – AngryHacker