1

WaveFormatConversionStream を使用して、録音された音声を含むモノチャネル、16 ビット PCM WAV ファイルのサンプル レートを 11025 から 16000 Hz に上げています。結果として得られる 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;
        }
      }
    }
  }
}
4

1 に答える 1

1

あなたのコードに間違いがあることは明らかではありません (ただし、Position = 0 を設定する必要はありません)。Windows の内部で提供されている ACM サンプル レート変換を使用していますが、これは合理的ですが素晴らしいものではありません。特に、リサンプリング時のエイリアシングとアーティファクトを減らすために通常推奨されるローパス フィルターは適用されないと思います。しかし、あなたの説明はそれよりも深刻に聞こえます。もう 1 つの方法として、バッファ サイズを 1 秒 (16000 * チャネル * 2) にすることもできます。

もう1つ、オーディオは16ビットだと思いますか?

于 2012-05-03T12:54:55.903 に答える