如何使用NAudio播放MP3文件

WaveStream waveStream = new Mp3FileReader(mp3FileToPlay); var waveOut = new WaveOut(); waveOut.Init(waveStream); waveOut.Play(); 

这引发了一个exception:

WaveBadFormat调用waveOutOpen

编码类型是“MpegLayer3”作为NAudio。

如何播放NAudio的mp3文件?

试试这样:

 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。 请参阅替代答案。

对于NAudio 1.6及以上版本的用户,请不要使用原始接受答案中的代码。 您不需要添加WaveFormatConversionStreamBlockAlignReductionStream ,并且应该避免将WaveOut与函数回调一起使用(如果您不在WinForms或WPF应用程序中,则首选WaveOutEvent )。 此外,除非您想要阻止播放,否则在音频结束之前通常不会睡眠。 只需订阅WaveOutPlaybackStopped活动即可。

以下代码可以很好地在NAudio中播放MP3:

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