2010-07-26 33 views
7

Tôi đặt nhạc.mp3 vào tài nguyên và sau đó tôi đã thêm Windows Media Player vào tham chiếu. Tôi đã viết mã này:Cách phát tệp .mp3 từ tài nguyên trong C#?

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

Nó không hoạt động. Làm cách nào để phát tệp .mp3 từ tài nguyên?

Trả lời

6

tôi đã làm nó:

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

Chúng ta phải xóa tập tin tạm thời này:

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

Tạo tệp tạm thời như thế này không được coi là giải pháp hợp lệ. Phương pháp MediaPlayer.Play, cho tốt hơn hoặc tệ hơn (tôi sẽ tranh luận tồi tệ hơn), không lấy một luồng như đầu vào. Bạn đang tốt hơn hết để triển khai MP3 với exe của bạn và vượt qua vị trí tập tin đến chức năng đó. – Seanba

2

tôi quấn thư viện mp3 bộ giải mã và làm cho nó có sẵn cho các nhà phát triển .net. Bạn có thể tìm thấy nó ở đây:

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

Bao gồm các mẫu để chuyển đổi tập tin mp3 để PCM, và đọc các thẻ ID3.

Đọc tài nguyên của bạn, chuyển đổi tài nguyên sang PCM và xuất nó sang lớp waveOut có sẵn dưới dạng thành phần .NET interop. Không cần tạo tệp tạm thời.

lớp

waveOut sẵn cũng trên SourceForge:

http://windowsmedianet.sourceforge.net/

0

Hoặc Tyr này;

 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(); 
Các vấn đề liên quan