使用NAudio来增加WAV文件的采样率导致"静态"

时间:2012-05-02 17:51:08

标签: c# audio wav naudio

我正在使用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;
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:1)

我的代码没有什么明显的错误(尽管不需要设置Position = 0)。它使用Windows下提供的ACM采样率转换,这是合理的,但并不精彩。特别是,我不认为它适用于任何低通滤波器,通常建议在重采样时减少混叠和伪像。但你所描述的听起来更严重。你可以尝试的另一件事是让你的缓冲区大小整整一秒 - 即16000 *通道* 2.

另一件事,我假设音频是16位?