2010-11-11 10 views
2

J'ai besoin de lire un fichier mp3. Je veux utiliser winmm.dll (Windows 7)Lire des fichiers audio en C#

class Program 
{ 
    [DllImport("winmm.dll")] 
    private static extern long mciSendString(string Cmd, StringBuilder StrReturn, int ReturnLength, IntPtr HwndCallback); 

    static void Main(string[] args) 
    { 
     string FileName = @"F:\MUSIC\ROCK.mp3"; 

     string CommandString = "open " + "\"" + FileName + "\"" + " type mpegvideo alias Mp3File"; 
     mciSendString(CommandString, null, 0, IntPtr.Zero); 
     CommandString = "play Mp3File"; 
     mciSendString(CommandString, null, 0, IntPtr.Zero); 
     Console.ReadKey(); 
    } 
} 

Mais quand je lance mon programme, rien ne se passe. Où est une erreur?

Répondre

-1
string FileName = @"F:\MUSIC\ROCK.mp3"; 
mciSendString("open \"" + FileName + "\" type mpegvideo alias MediaFile", null, 0, IntPtr.Zero); 
mciSendString("play " + FileName + " from 0", null, 0, IntPtr.Zero); 

Il fonctionne correctement.

+0

Êtes-vous le même Sergey qui a posé la question? –

-2

Ici,

class Program 
{ 
    public string _command; 
    public bool isOpen; 
    [DllImport("winmm.dll")] 

    public static extern long mciSendString(string strCommand,StringBuilder strReturn,int iReturnLength, IntPtr hwndCallback); 

static void Main(string[] args) 
{ 
    string FileName = @"F:\MUSIC\ROCK.mp3"; 
    string _command = "open \"" + sFileName + "\" type mpegvideo alias MediaFile"; 
     mciSendString(_command, null, 0, IntPtr.Zero); 
    isOpen = true; 

    if(isOpen) 
    { 
     _command = "play MediaFile"; 
     if (loop) 
     _command += " REPEAT"; 
     mciSendString(_command, null, 0, IntPtr.Zero); 
     } 
/*For Close the audio 
    _command = "close MediaFile"; 
    mciSendString(_command, null, 0, IntPtr.Zero); 
    isOpen = false; */ 
} 
} 

CommandString devrait être "jouer Mediafile" au lieu de "jouer mp3file" Je espère que ça va aider .. =]

+0

Il doit correspondre à l'ID de l'appareil utilisé dans le 'alias' clause de la commande' open'. Ce qu'il a déjà fait dans le code original. –

-1

Votre chaîne de commande semble avoir une réponse incorrecte type.

Vous transmettez type mpegvideo, mais le fichier n'est pas un fichier vidéo.

Le type correct pour audio est type waveaudio pour les fichiers * .wav, type sequencer pour les fichiers * .mid, type cdaudio pour RedBook CD. Je ne vois aucun moyen de jouer MP3 avec MCI. Vous pourriez essayer de laisser entièrement la clause type, alors MCI essaiera de la détecter.

En outre, vous devez capturer le code d'erreur renvoyé par mciSendString, il peut vous donner plus d'informations.

MSDN Reference

2

La réponse acceptée ne fonctionnera pas pour les chemins de fichier contenant des espaces. La bonne méthode consiste à utiliser l'alias que vous configurez dans la commande d'ouverture:

string FileName = @"F:\MUSIC\ROCK.mp3"; 
mciSendString("open \"" + FileName + "\" type mpegvideo alias thisIsMyTag", null, 0, IntPtr.Zero); 
mciSendString("play thisIsMyTag from 0", null, 0, IntPtr.Zero);