我想重新采样音频:将其采样率从 44k 更改为 11k。我得到的输入是以字节为单位的原始音频。它确实是原始的,它没有标题 - 如果我尝试将它加载到WaveFileReader
.
我目前正在尝试实现它的方式是这样的(只是一段非常简化的代码):
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()
总是获得相同的值,并且永远不会在 Stream 中前进。我什至尝试Seek()
在 each 之后找到正确的位置Read()
,但这似乎也不起作用,我仍然总是得到相同的值。
我究竟做错了什么?这甚至是重新采样原始音频的正确方法吗?提前致谢!