2010-07-26 2 views

답변

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 메서드는 더 좋든 나쁘 든 (나쁘면 논쟁 하겠지만) 스트림을 입력으로 사용하지 않습니다. exe를 사용하여 MP3를 배포하고 파일 위치를 해당 기능에 전달하는 것이 훨씬 낫습니다. – Seanba

2

나는 MP3 디코더 라이브러리를 포장 및 .NET 개발자가 제공합니다. 당신은 여기에서 찾을 수 있습니다 포함

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

는 PCM에 MP3 파일을 변환하고, ID3 태그를 읽을 수있는 샘플입니다.

리소스를 읽고이를 PCM으로 변환하여 interop .NET 구성 요소로 제공되는 waveOut 클래스로 출력하십시오. 임시 파일을 만들 필요가 없습니다. 또한 소스 포지에

waveOut을 클래스를 사용할 수 :

http://windowsmedianet.sourceforge.net/

0

또는 티르이;

 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(); 
관련 문제