Lecture d'échantillons directement à partir d'un fichier MP3 converti à l'aide de NAudio

StackOverflow https://stackoverflow.com/questions/1804489

  •  05-07-2019
  •  | 
  •  

Question

J'essaie de lire des échantillons PCM à partir d'un fichier MP3 (converti) à l'aide de NAudio, mais échouant en tant que méthode Lire renvoie zéro (indiquant EOF) à chaque fois.

Exemple: ce morceau de code, qui tente de lire un seul échantillon 16 bits, affiche toujours le signe "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));
                    }
                }
            }
        }
    }
}

sortie:

16 bit PCM: 44kHz 2 channels
0

Mais cette version qui lit un fichier WAV fonctionne bien (j’ai utilisé iTunes pour convertir le MP3 en WAV afin qu’ils contiennent des exemples similaires):

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

sortie:

16 bit PCM: 44kHz 2 channels
2

Que se passe-t-il ici? Les deux flux ont les mêmes formats d'onde, donc je m'attendrais à pouvoir utiliser la même API pour lire des échantillons. La définition de la propriété Position n'aide pas non plus.

Était-ce utile?

La solution

Vous avez probablement besoin de lire en gros morceaux. NAudio utilise ACM pour effectuer la conversion de MP3 en WAV, et si la mémoire tampon cible n’est pas assez grande, le codec peut refuser la conversion des données. En d’autres termes, vous devez convertir un bloc d’échantillons avant de pouvoir lire le premier échantillon.

Les fichiers WAV sont une question différente, car il est agréable et facile de lire un seul échantillon d'eux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top