如何使用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及以上版本的用户,请不要使用原始接受答案中的代码。 您不需要添加WaveFormatConversionStream
或BlockAlignReductionStream
,并且应该避免将WaveOut
与函数回调一起使用(如果您不在WinForms或WPF应用程序中,则首选WaveOutEvent
)。 此外,除非您想要阻止播放,否则在音频结束之前通常不会睡眠。 只需订阅WaveOut
的PlaybackStopped
活动即可。
以下代码可以很好地在NAudio中播放MP3:
var reader = new Mp3FileReader("test.mp3"); var waveOut = new WaveOut(); // or WaveOutEvent() waveOut.Init(reader); waveOut.Play();