如何使用NAudio播放MP3文件

问题描述 投票:9回答:2
WaveStream waveStream = new Mp3FileReader(mp3FileToPlay);
var waveOut = new WaveOut();
waveOut.Init(waveStream); 
waveOut.Play();

这引发了一个异常:

WaveBadFormat调用waveOutOpen

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

我怎么能用NAudio播放mp3文件?

c# mp3 naudio
2个回答
8
投票

试试这样:

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


35
投票

对于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();
© www.soinside.com 2019 - 2024. All rights reserved.