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?

War es hilfreich?

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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top