我正在使用WaveFormatConversionStream来提高包含11025到16000 Hz录制语音的单通道16位PCM WAV文件的采样率。由此产生的WAV文件仍然可以理解,但似乎有很多“静态”(听起来好像是通过部分爆炸的扬声器播放)。这是正常的,预期的行为,还是我做错了什么?代码如下:
using (WaveFileReader wfr = new WaveFileReader("inFile.wav"))
{
var newFormat = new WaveFormat(16000, wfr.WaveFormat.BitsPerSample, wfr.WaveFormat.Channels);
using (WaveFileWriter wfw = new WaveFileWriter("outFile.wav", newFormat))
{
using (WaveFormatConversionStream conversionStream = new WaveFormatConversionStream(newFormat, wfr))
{
conversionStream.Position = 0;
byte[] buffer = new byte[1024];
while (conversionStream.Position < conversionStream.Length)
{
int bytesRead = conversionStream.Read(buffer, 0, 1024);
if (bytesRead > 0)
{
wfw.Write(buffer, 0, bytesRead);
}
else
{
break;
}
}
}
}
}
答案 0 :(得分:1)
我的代码没有什么明显的错误(尽管不需要设置Position = 0)。它使用Windows下提供的ACM采样率转换,这是合理的,但并不精彩。特别是,我不认为它适用于任何低通滤波器,通常建议在重采样时减少混叠和伪像。但你所描述的听起来更严重。你可以尝试的另一件事是让你的缓冲区大小整整一秒 - 即16000 *通道* 2.
另一件事,我假设音频是16位?