2012-12-08 3 views
1

Je souhaite lire un fichier MP3 sur une carte son autre que celle par défaut (par exemple, j'ai branché un casque USB).Changement de carte son et lecture d'un fichier MP3

J'ai un code qui fonctionne parfaitement bien si je veux lire un fichier WAV sur une carte son différente. Mais avec MP3, ça échoue juste. J'essaie d'écrire le code en C#, mais pour qu'il n'y ait rien entre l'application et WinAPI (par exemple interop), je l'ai traduit en VB6. Plus précisément, ce qui échoue est l'appel à changer la carte son - mciSendCommand - et il échoue avec l'erreur 274 - The MCI device you are using does not support the specified command. La séquence avec les opérations de type MCI est typiquement comme ceci: Ouvrir un fichier, Faire des opérations (par exemple changer de carte son, etc ...), puis jouer.

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 

Fait intéressant, si je veux lire un fichier WAV, pour lequel je dois l'ouvrir avec waveaudio au lieu de mpegvideo (comme celui-ci cmd = "Open test.mp3 type waveaudio alias WAVFile"), tout fonctionne bien. Mais peu importe ce que j'ai essayé, ça ne marchera pas si j'essaie d'ouvrir un fichier MP3.

Qu'est-ce qui me manque? J'ai vu une douzaine de questions sans réponse comme celle-ci remontant à 2000 - il doit y avoir un moyen de lire un fichier MP3 sur une carte son différente.

+0

est ici un exemple ASM MTBE peut vous aider à: http: // www. rohitab.com/discuss/topic/9205-play-mpeg-mp3-avi-probably/ – Jester

+0

ce gars Dave a l'air d'avoir rencontré le même problème: http://www.itlisting.org/1-windows-media/911fe1683fd26cc4 .aspx –

+0

@Jester L'exemple ASM ne modifie pas le périphérique audio sur lequel le fichier mp3 sera lu. Il joue simplement le fichier. Cette partie fonctionne bien pour moi. Changer d'appareil sur lequel jouer - c'est ce qui ne marche pas. – AngryHacker

Répondre

0

Avez-vous essayé de changer

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

à

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

un coup d'oeil à cet article sur CodeProject qui utilise .NET et Winmm.dll pour lire les fichiers MP3:

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

+0

Le CodeProject concerne la lecture du fichier MP3, ce qui ne pose aucun problème. Le problème est de changer la carte son qui est (selon les docs) accomplie via la commande mciSendCommand et c'est ce qui échoue chaque fois que le type 'mpegvideo' est spécifié. L'alias n'a pas vraiment d'importance (mais pour la postérité j'ai essayé et ça a échoué). – AngryHacker