Я пытаюсь прочитать образцы PCM из (преобразованного) файла MP3, используя NAudio, но не удается, поскольку метод Read
возвращает ноль (указывая EOF) каждый раз.
Пример: этот фрагмент кода, который пытается прочитать один 16-битный образец, всегда печатает «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));
}
}
}
}
}
}
Выход:
16 bit PCM: 44kHz 2 channels
0
Но эта версия, которая читает из файла WAV, работает нормально (я использовал iTunes, чтобы преобразовать MP3 в WAV, чтобы они содержали похожие образцы):
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));
}
}
}
выход:
16 bit PCM: 44kHz 2 channels
2
Что здесь происходит? Оба потока имеют одинаковые волновые форматы, поэтому я ожидал, что смогу использовать один и тот же API для чтения образцов. Установка свойства Position
тоже не помогает.