Domanda

Sto cercando di leggere campioni PCM da un file MP3 (convertito) usando NAudio, ma non riesco perché il metodo Leggi restituisce ogni volta zero (che indica EOF).

Esempio: questo pezzo di codice, che tenta di leggere un singolo campione a 16 bit, stampa sempre " 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));
                    }
                }
            }
        }
    }
}

uscita:

16 bit PCM: 44kHz 2 channels
0

Ma questa versione che legge da un file WAV funziona bene (ho usato iTunes per convertire l'MP3 in un WAV, quindi dovrebbero contenere esempi simili):

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

uscita:

16 bit PCM: 44kHz 2 channels
2

Cosa sta succedendo qui? Entrambi i flussi hanno gli stessi formati d'onda, quindi mi aspetto di poter usare la stessa API per leggere i campioni. L'impostazione della proprietà Position non aiuta neanche.

È stato utile?

Soluzione

Probabilmente dovrai leggere pezzi più grandi. NAudio utilizza ACM per eseguire la conversione da MP3 a WAV e, se il buffer di destinazione non è abbastanza grande, il codec potrebbe rifiutarsi di convertire qualsiasi dato. In altre parole, è necessario convertire un blocco di campioni prima di poter leggere il primo campione.

I file WAV sono una questione diversa in quanto è bello e facile leggere un singolo campione da essi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top