2010-07-26 13 views
7

Umieściłem muzykę.mp3 w zasobach, a następnie dodałem program Windows Media Player do referencji. Napisałem ten kod:Jak odtwarzać plik .mp3 z zasobów w języku C#?

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

To nie działa. Jak mogę odtwarzać plik .mp3 z zasobów?

Odpowiedz

6

Zrobiłem to:

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

Musimy usunąć ten plik tymczasowy:

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

Utworzenie takiego pliku tymczasowego nie powinno być uważane za prawidłowe rozwiązanie. Metoda MediaPlayer.Play, na lepsze lub na gorsze (argumentowałbym gorzej), nie bierze strumienia jako danych wejściowych. Znacznie lepiej jest zainstalować MP3 z plikiem exe i przekazać lokalizację pliku do tej funkcji. – Seanba

2

I zawinięte biblioteki dekodera MP3 i udostępniła je NET deweloperów. Można go znaleźć tutaj:

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

Zawarte są próbki przekonwertować plik mp3 do PCM i czytaj ID3.

Zapoznaj się z zasobem, przekonwertuj go na PCM i wyprowadź go do klasy waveOut, która jest dostępna jako komponent .NET. Nie ma potrzeby tworzenia plików tymczasowych.

klas

WaveOut dostępne również na SourceForge:

http://windowsmedianet.sourceforge.net/

0

lub Tyr to;

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