2010-03-21 3 views
7
WaveStream waveStream = new Mp3FileReader(mp3FileToPlay); 
var waveOut = new WaveOut(); 
waveOut.Init(waveStream); 
waveOut.Play(); 

를 사용하여 MP3 파일을 재생합니다.방법이 예외가 발생 NAudio

NAudio로 어떻게 mp3 파일을 재생할 수 있습니까?

답변

7

는 다음과 같이하십시오 :

class Program 
{ 
    static void Main() 
    { 
     using (var ms = File.OpenRead("test.mp3")) 
     using (var rdr = new Mp3FileReader(ms)) 
     using (var wavStream = WaveFormatConversionStream.CreatePcmStream(rdr)) 
     using (var baStream = new BlockAlignReductionStream(wavStream)) 
     using (var waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback())) 
     { 
      waveOut.Init(baStream); 
      waveOut.Play(); 
      while (waveOut.PlaybackState == PlaybackState.Playing) 
      { 
       Thread.Sleep(100); 
      } 
     } 
    } 
} 

편집이 코드는 이제 유효 기간이 (NAudio 1.3 관련). 최신 버전의 NAudio에는 권장되지 않습니다. 다른 답변을 참조하십시오.

+1

. "InvalidParameter using acmStreamPrepareHeader" – Rookian

+0

방금 ​​NAudio (http://www.codeplex.com/naudio)의 최신 버전을 다운로드하고이 코드를 내 컴퓨터에서 mp3로 테스트했습니다. 그것은 나를 위해 일했습니다. –

+0

64 비트 환경이 있습니까? x64, 릴리스 모드를 사용하여 솔루션을 다시 컴파일하고 .NET 2.0에서 .NET 플랫폼을 3.5로 변경했습니다 ... 아마도이 때문에 오류가 발생했을 수 있습니까? – Rookian

28

NAudio 1.6 이상의 사용자는 원래 허용 된 답변의 코드를 사용하지 마십시오. WaveFormatConversionStream 또는 BlockAlignReductionStream을 추가 할 필요가 없으므로 함수 콜백과 함께 WaveOut을 사용하지 않아야합니다 (WinForms 또는 WPF 응용 프로그램에없는 경우 WaveOutEvent이 바람직합니다). 또한 재생을 차단하고 싶지 않으면 일반적으로 오디오가 끝날 때까지 잠 들어 있지 않습니다. WaveOut 님의 PlaybackStopped 이벤트에 가입하기 만하면됩니다.

다음 코드는 NAudio에서 MP3를 재생 잘 작동합니다 :이 작동하지 않습니다

reader = new Mp3FileReader("test.mp3"); 
var waveOut = new WaveOut(); // or WaveOutEvent() 
waveOut.Init(reader); 
waveOut.Play(); 
+0

안녕하세요. 답변 해 주셔서 감사합니다. 나는 당신의 대답에 따라, "test.mp3"파일은 어디에 위치해야하는지 알고 싶습니다. – Eido95

+1

와우. OP가 쓴 것과 같은 정확한 코드를 사용하여 투표율이 높거나 그 차이가 정확히 어디에 있습니까? 나는 그것을 발견 할 수 없다. –

+0

WaveOut은 일회용이지만 코드에 처리되지 않습니다. 처분하면 오디오 재생이 중지됩니다. 처분하지 않으면 가비지 컬렉터가 수집 할 때까지만 재생됩니다. –

관련 문제