2010-07-26 16 views
7

Ho messo music.mp3 in risorse e ho aggiunto Windows Media Player ai riferimenti. Ho scritto questo codice:Come si gioca il file .mp3 dalle risorse in C#?

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

Non funziona. Come posso riprodurre il file .mp3 dalle risorse?

risposta

6

ho fatto:

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(); 

Dobbiamo eliminare questo file temporaneo:

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

La creazione di un file temporaneo come questo non deve essere considerata una soluzione valida. Il metodo MediaPlayer.Play, nel bene o nel male (direi peggio), non accetta uno stream come input. Stai molto meglio per distribuire l'MP3 con il tuo exe e passare il percorso del file a quella funzione. – Seanba

2

ho avvolto biblioteca decodificatore mp3 e reso disponibile per gli sviluppatori .net. Potete trovare qui:

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

Incluso sono i campioni per convertire file mp3 in PCM, e leggere i tag ID3.

Leggere la risorsa, convertirla in PCM e inviarla alla classe waveOut disponibile come componente .NET di interoperabilità. Non c'è bisogno di creare file temporanei.

classi

WaveOut disponibili anche su SourceForge:

http://windowsmedianet.sourceforge.net/

0

O Tyr questo;

 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(); 
Problemi correlati