2010-07-26 2 views
7

Я поместил music.mp3 в ресурсы, а затем добавил проигрыватель Windows Media к ссылкам. Я написал этот код:Как играть в .mp3 файл из ресурсов в C#?

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

Не работает. Как я могу воспроизвести файл .mp3 из ресурсов?

ответ

6

Я сделал это:

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

Мы должны удалить этот временный файл:

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

Создание временного файла, подобного этому, не должно считаться допустимым решением. Метод MediaPlayer.Play, к лучшему или худшему (я бы сказал хуже), не принимает поток в качестве входных данных. Вам гораздо удобнее развернуть MP3 с вашим exe и передать местоположение файла этой функции. – Seanba

2

Я обернутый библиотеку mp3 декодер и сделал его доступным для разработчиков .NET. Вы можете найти его здесь:

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

Включены образцы для преобразования mp3 файла PCM, и прочитать ID3-теги.

Прочтите свой ресурс, преобразуйте его в PCM и выведите его в класс waveOut, который доступен в качестве компонента взаимодействия .NET. Нет необходимости создавать временные файлы.

классы

WaveOut доступны также на SourceForge:

http://windowsmedianet.sourceforge.net/

0

Или Tyr это;

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