Как играть в MP3-файл с помощью NAudio

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

Это вызывает исключение:

WaveBadFormat вызов waveOutOpen

тип кодировки "MpegLayer3" как NAudio.

Как я могу играть в mp3-файл с NAudio?

2 ответов


попробуйте так:

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 с обратными вызовами функций (WaveOutEvent предпочтительнее, если вы не находитесь в приложении WinForms или WPF). Кроме того, если вы не хотите блокировать воспроизведение, вы обычно не будете спать до окончания звука. Просто подпишитесь на WaveOut ' s PlaybackStopped событие.

следующий код будет работать просто отлично, чтобы играть в MP3 в NAudio:

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