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

Dies löst eine Ausnahme spielen.Wie eine MP3-Datei NAudio

Wie kann ich eine mp3-Datei mit NAudio abspielen?

Antwort

7

Versuchen wie folgt aus:

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

bearbeiten dieser Code ist jetzt veraltet (bezieht sich auf NAudio 1.3). Nicht empfohlen für neuere Versionen von NAudio. Siehe alternative Antwort.

+1

Dies funktioniert nicht. "InvalidParameter calling acmStreamPrepareHeader" – Rookian

+0

Ich habe gerade die neueste Version von NAudio (http://www.codeplex.com/naudio) heruntergeladen und diesen Code mit einem mp3 auf meinem Computer getestet. Es hat für mich funktioniert. –

+0

Haben Sie eine 64-Bit-Umgebung? Ich habe die Lösung mit x64, Release-Modus neu kompiliert und die .NET-Plattform von .NET 2.0 auf 3.5 geändert ... vielleicht bekomme ich deswegen die Fehler? – Rookian

28

Für Benutzer von NAudio 1.6 und höher, verwenden Sie bitte nicht den Code in der ursprünglichen akzeptierten Antwort. Sie müssen keine WaveFormatConversionStream oder BlockAlignReductionStream hinzufügen, und Sie sollten WaveOut mit Funktionsrückrufen vermeiden (WaveOutEvent ist vorzuziehen, wenn Sie nicht in einer WinForms- oder WPF-Anwendung sind). Wenn Sie die Wiedergabe nicht blockieren möchten, würden Sie normalerweise nicht schlafen, bis der Ton endet. Abonnieren Sie einfach WaveOutPlaybackStopped Ereignis.

Der folgende Code wird gut funktionieren eine MP3 in NAudio zu spielen:

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

Hey Mark, danke für deine Antwort. Ich würde gerne wissen, wo sich die Datei "test.mp3" befinden sollte, laut Ihrer Antwort? – Eido95

+1

Wow. Solch eine hochgewählte Antwort mit dem genauen Code wie von OP geschrieben - oder wo genau ist der Unterschied? Ich kann keinen finden. –

+0

WaveOut ist ein Einwegprodukt, das jedoch nie in Ihrem Code enthalten ist. Wenn Sie es entsorgen, stoppt der Ton die Wiedergabe. Wenn Sie es nicht entsorgen, wird es wahrscheinlich nur gespielt, bis der Müllsammler es sammelt. –

Verwandte Themen