Pergunta

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

Isso lança uma exceção:

WaveBadformat Calling WaveOtoPen

O tipo de codificação é "mpeGlayer3" como Naudio.

Como posso reproduzir um arquivo MP3 com Naudio?

Foi útil?

Solução

Tente assim:

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);
            }
        }
    }
}

Editar Este código agora está desatualizado (refere -se a Naudio 1.3). Não recomendado em versões mais recentes do Naudio. Por favor, veja a resposta alternativa.

Outras dicas

Para usuários do Naudio 1.6 e acima, não use o código na resposta aceita original. Você não precisa adicionar um WaveFormatConversionStream, ou a BlockAlignReductionStream, e você deve evitar usar WaveOut com retornos de chamada de função (WaveOutEvent é preferível se você não estiver em um aplicativo Winforms ou WPF). Além disso, a menos que você queira bloquear a reprodução, normalmente não dormia até o término do áudio. Basta se inscrever WaveOut's PlaybackStopped evento.

O código a seguir funcionará muito bem para tocar um MP3 em Naudio:

var reader = new Mp3FileReader("test.mp3");
var waveOut = new WaveOut(); // or WaveOutEvent()
waveOut.Init(reader); 
waveOut.Play();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top