Я хочу воспроизвести MP3 на звуковой карте, отличной от стандартной (например, я подключил USB-гарнитуру).
У меня есть код, который отлично работает, если я хочу воспроизвести файл WAV на другой звуковой карте. Но с MP3 это просто не получается. Я пытаюсь написать код на C #, но ради того, чтобы между приложением и 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 на другой звуковой карте.
ты пытался изменить
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»
Других решений пока нет …