2012-05-02 55 views
1

我正在使用WaveFormatConversionStream來提高包含錄製的語音從11025到16000 Hz的單聲道16位PCM WAV文件的採樣率。由此產生的WAV文件仍然可以理解,但似乎有很多「靜態」(它聽起來好像是通過部分放大揚聲器播放)。這是正常的,預期的行爲,還是我做錯了什麼?代碼如下:使用NAudio增加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

沒有什麼明顯的我可以看到你的代碼錯誤(雖然不需要設置Position = 0)。它正在使用Windows提供的ACM採樣率轉換,這是合理的,但並不精彩。特別是,我不認爲它應用任何低通濾波器,通常建議使用這些低通濾波器來減少重採樣時的混疊和僞像。但是,你所描述的聽起來更加嚴重。你可以嘗試的另一件事是讓你的緩衝區大小整秒 - 即16000 *通道* 2.

另一件事,我假設音頻是16位?