Wie eine MP3-Datei NAudio spielen
Frage
WaveStream waveStream = new Mp3FileReader(mp3FileToPlay);
var waveOut = new WaveOut();
waveOut.Init(waveStream);
waveOut.Play();
Dies löst eine Ausnahme:
WaveBadFormat Aufruf waveOutOpen
Der Codierungstyp ist "MpegLayer3" als NAudio.
Wie kann ich eine MP3-Datei mit NAudio spielen?
Lösung
Versuchen Sie 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 auf neuere Versionen von NAudio empfohlen. Bitte beachten Sie alternative Antwort.
Andere Tipps
Für Benutzer von NAudio 1.6 und höher, bitte den Code nicht in der ursprünglichen akzeptierten Antwort verwenden. Sie brauchen kein WaveFormatConversionStream
oder ein BlockAlignReductionStream
hinzuzufügen, und Sie sollten mit WaveOut
mit Funktion Rückrufe vermeiden (WaveOutEvent
vorzuziehen ist, wenn Sie nicht in einer WinForms oder WPF-Anwendung sind). Auch wenn Sie die Wiedergabe wollen blockiert, würden Sie normalerweise nicht schlafen, bis Audio-Oberflächen. Abonnieren Sie einfach WaveOut
des PlaybackStopped
Ereignis.
Der folgende Code wird gut funktioniert eine MP3 in NAudio zu spielen:
var reader = new Mp3FileReader("test.mp3");
var waveOut = new WaveOut(); // or WaveOutEvent()
waveOut.Init(reader);
waveOut.Play();