NAudioを使用して(変換された)MP3ファイルからPCMサンプルを読み取ろうとしていますが、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
しても役に立ちません。