Как воспроизвести файл MP3 с помощью NAudio - PullRequest
9 голосов
/ 21 марта 2010
WaveStream waveStream = new Mp3FileReader(mp3FileToPlay);
var waveOut = new WaveOut();
waveOut.Init(waveStream); 
waveOut.Play();

Это исключение:

WaveBadFormat, вызывающий waveOutOpen

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

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

Ответы [ 2 ]

35 голосов
/ 09 сентября 2013

Для пользователей 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();
8 голосов
/ 21 марта 2010

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

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.Пожалуйста, посмотрите альтернативный ответ.

...