WaveStream waveStream = new Mp3FileReader(mp3FileToPlay);
var waveOut = new WaveOut();
waveOut.Init(waveStream);
waveOut.Play();
Run Code Online (Sandbox Code Playgroud)
这引发了一个异常:
WaveBadFormat调用waveOutOpen
编码类型是"MpegLayer3"作为NAudio.
我怎么能用NAudio播放mp3文件?
Mar*_*ath 35
对于NAudio 1.6及以上版本的用户,请不要使用原始接受答案中的代码.您不需要添加a WaveFormatConversionStream
或a BlockAlignReductionStream
,并且应该避免使用WaveOut
函数回调(WaveOutEvent
如果您不在WinForms或WPF应用程序中,则更可取).此外,除非您想要阻止播放,否则在音频结束之前通常不会休眠.刚刚订阅WaveOut
的PlaybackStopped
事件.
以下代码可以很好地在NAudio中播放MP3:
var reader = new Mp3FileReader("test.mp3");
var waveOut = new WaveOut(); // or WaveOutEvent()
waveOut.Init(reader);
waveOut.Play();
Run Code Online (Sandbox Code Playgroud)
试试这样:
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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑此代码现已过时(与NAudio 1.3相关).不推荐用于较新版本的NAudio.请参阅替代答案.