Como reproduzir um arquivo mp3 usando Naudio
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?
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();