Frage

Ich versuche, PCM-Samples von einer (umgerechnet) MP3-Datei NAudio, aber andernfalls zu lesen, wie die Read Methode gibt null (was anzeigt, EOF) jedes Mal.

Beispiel: dieses Stück Code, der eine einzelne 16-Bit-Probe zu lesen versucht, druckt immer "0":

using System;
using NAudio.Wave;

namespace NAudioMp3Test
{
    class Program
    {
        static void Main(string[] args)
        {
            using (Mp3FileReader fr = new Mp3FileReader("MySong.mp3"))
            {
                byte[] buffer = new byte[2];
                using (WaveStream pcm = WaveFormatConversionStream.CreatePcmStream(fr))
                {
                    using (WaveStream aligned = new BlockAlignReductionStream(pcm))
                    {
                        Console.WriteLine(aligned.WaveFormat);
                        Console.WriteLine(aligned.Read(buffer, 0, 2));
                    }
                }
            }
        }
    }
}

Ausgabe:

16 bit PCM: 44kHz 2 channels
0

Aber diese Version, die aus einer WAV-Datei liest funktioniert (ich iTunes verwendet, um die MP3 in eine WAV zu konvertieren, so dass sie ähnliche Proben enthalten sollen):

static void Main(string[] args)
{
    using (WaveFileReader pcm = new WaveFileReader("MySong.wav"))
    {
        byte[] buffer = new byte[2];
        using (WaveStream aligned = new BlockAlignReductionStream(pcm))
        {
            Console.WriteLine(aligned.WaveFormat);
            Console.WriteLine(aligned.Read(buffer, 0, 2));
        }
    }
}

Ausgabe:

16 bit PCM: 44kHz 2 channels
2

Was ist denn hier los? Beide Ströme haben die gleichen Wellenformate so würde ich erwarten, dass die gleiche API verwenden, Proben zu lesen. die Position Eigenschaft Einstellung hilft auch nicht.

War es hilfreich?

Lösung

Sie müssen wahrscheinlich größere Brocken lesen. NAudio nutzt ACM die Konvertierung von MP3 in WAV auszuführen, und wenn Ihr Zielpuffer nicht groß genug ist, sich weigern, der Codec kann alle Daten überhaupt zu konvertieren. Mit anderen Worten, müssen Sie einen Block von Proben konvertieren, bevor Sie die erste Probe lesen können.

WAV-Dateien sind eine andere Sache, wie es schön und einfach ist, aus ihnen eine einzige Probe zu lesen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top