2010-03-21 21 views
7
WaveStream waveStream = new Mp3FileReader(mp3FileToPlay); 
var waveOut = new WaveOut(); 
waveOut.Init(waveStream); 
waveOut.Play(); 

Esto arroja una excepción:Cómo reproducir un archivo MP3 usando NAudio

WaveBadFormat llamando waveOutOpen

El tipo de codificación es "MpegLayer3" como NAudio.

¿Cómo puedo reproducir un archivo mp3 con NAudio?

Respuesta

7

Trate de esta manera:

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 ya está fuera de fecha (se refiere a NAudio 1.3). No recomendado en versiones más nuevas de NAudio. Por favor vea una respuesta alternativa.

+1

Esto no funciona. "InvalidParameter llamando a acmStreamPrepareHeader" – Rookian

+0

Acabo de descargar la última versión de NAudio (http://www.codeplex.com/naudio) y probé este código con un mp3 en mi computadora. Funcionó para mí –

+0

¿Tiene un entorno de 64 bits? He recompilado la solución usando x64, modo de lanzamiento y cambiado la plataforma .NET de .NET 2.0 a 3.5 ... ¿tal vez por esto obtengo los errores? – Rookian

28

Para usuarios de NAudio 1.6 y superiores, no utilicen el código en la respuesta original aceptada. No necesita agregar un WaveFormatConversionStream, o un BlockAlignReductionStream, y debe evitar el uso de WaveOut con devolución de llamadas de función (WaveOutEvent es preferible si no está en una aplicación WinForms o WPF). Además, a menos que quieras bloquear la reproducción, normalmente no dormirás hasta que finalice el audio. Simplemente suscríbase al evento WaveOut de PlaybackStopped.

El siguiente código funcionará bien para reproducir un MP3 en NAudio:

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

Hola, gracias por tu respuesta. Me gustaría saber, de acuerdo con su respuesta, ¿dónde se encuentra el archivo "test.mp3"? – Eido95

+1

Wow. Una respuesta tan alta con el código exacto escrito por OP, o ¿dónde está exactamente la diferencia? No puedo encontrar uno. –

+0

WaveOut es desechable pero nunca se desecha en su código. Si lo elimina, el audio deja de reproducirse. Si no lo elimina, es probable que solo juegue hasta que el recolector de basura lo recolecte. –

Cuestiones relacionadas