オーディオをリサンプリングしたい: サンプル レートを 44k から 11k に変更します。私が得た入力は、バイト単位の生のオーディオです。それは本当に未加工で、ヘッダーがありません。これを にロードしようとするとWaveFileReader
、「WAVE ファイルではありません - RIFF ヘッダーがありません」という例外が発生します。
私が現在それを達成しようとしている方法は、次のようなものです(本当に単純化されたコードです):
WaveFormat ResampleInputFormat = new WaveFormat(44100, 1);
WaveFormat ResampleOutputFormat = new WaveFormat(11025, 1);
MemoryStream ResampleInputMemoryStream = new MemoryStream();
foreach (var b in InputListOfBytes)
{
ResampleInputMemoryStream.Write(new byte[]{b}, 0, 1);
}
RawSourceWaveStream ResampleInputWaveStream =
new RawSourceWaveStream(ResampleInputMemoryStream, ResampleInputFormat);
WaveFormatConversionStream ResampleOutputStream =
new WaveFormatConversionStream(ResampleOutputFormat, ResampleInputWaveStream);
byte[] bytes = new byte[2];
while (ResampleOutputStream.Read(bytes, 0, 2) > 0)
{
OutputListOfBytes.Add(bytes[0]);
OutputListOfBytes.Add(bytes[1]);
}
私の問題は次のとおりです。最後のループは無限ループです。はRead()
常に同じ値を取得し、ストリーム内で進むことはありません。Seek()
各 の後に正しい位置に -ingしようとしましたRead()
が、それもうまくいかないようで、常に同じ値が得られます。
私は何を間違っていますか?そして、これは生のオーディオをリサンプリングする正しい方法ですか? 前もって感謝します!