2010-07-26 22 views
7

J'ai mis music.mp3 dans les ressources, puis j'ai ajouté Windows Media Player aux références. J'ai écrit ce code:Comment lire un fichier .mp3 à partir de ressources en C#?

WindowsMediaPlayer wmp = new WindowsMediaPlayer(); 
      wmp.URL = "music.mp3"; 
      wmp.controls.play(); 

Cela ne fonctionne pas. Comment puis-je lire un fichier .mp3 à partir de ressources?

Répondre

6

Je l'ai fait:

WindowsMediaPlayer wmp = new WindowsMediaPlayer(); 
     Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("PostGen.Resources.Kalimba.mp3"); 
     using (Stream output = new FileStream ("C:\\temp.mp3", FileMode.Create)) 
     { 
      byte[] buffer = new byte[32*1024]; 
      int read; 

      while ((read= stream.Read(buffer, 0, buffer.Length)) > 0) 
      { 
       output.Write(buffer, 0, read); 
      } 
     } 
     wmp.URL = "C:\\temp.mp3"; 
     wmp.controls.play(); 

Nous devons supprimer ce fichier temporaire:

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     File.Delete("C:\\temp.mp3"); 
    } 
+0

La création d'un fichier temporaire comme celui-ci ne doit pas être considérée comme une solution valide. La méthode MediaPlayer.Play, pour le meilleur ou pour le pire (je dirais pire), ne prend pas un flux comme entrée. Il vaut mieux déployer le MP3 avec votre exe et passer l'emplacement du fichier à cette fonction. – Seanba

2

J'enroulai bibliothèque décodeur mp3 et fait disponible pour les développeurs .NET. Vous pouvez le trouver ici:

http://sourceforge.net/projects/mpg123net/

Inclus sont les échantillons pour convertir le fichier mp3 à PCM, et lire les tags ID3.

Lisez votre ressource, convertissez-la en PCM et affichez-la dans la classe waveOut disponible en tant que composant interop .NET. Pas besoin de créer des fichiers temporaires.

cours waveout disponibles aussi sur SourceForge:

http://windowsmedianet.sourceforge.net/

0

ou Tyr; ce

 var file = $"{Path.GetTempPath()}temp.mp3"; 
      if (!File.Exists(file)) 
      { 
       using (Stream output = new FileStream(file, FileMode.Create)) 
       { 
        output.Write(Properties.Resources.Kalimba, 0, Properties.Resources.Kalimba.Length); 
       } 
      } 
      var wmp = new WindowsMediaPlayer { URL = file }; 
      wmp.controls.play();