2014-06-19 176 views
3

我想重新採樣音頻字節數組從8Khz到48Khz。音頻流從網絡套接字獲得爲byte[]如何使用NAudio重新採樣內存中的音頻流(字節[])?

閱讀Mark Heath's Blog about resampling using NAudio,我碰到下面的代碼

int outRate = 16000; 
var inFile = @"test.mp3"; 
var outFile = @"test resampled WDL.wav"; 
using (var reader = new AudioFileReader(inFile)) 
{ 
    var resampler = new WdlResamplingSampleProvider(reader, outRate); 
    WaveFileWriter.CreateWaveFile16(outFile, resampler); 
} 

但這個代碼作用,而不是在內存中的數據文件流(AudioFileReader)(byte[])。我怎樣才能修改這段代碼來上傳我的字節數組?

編輯:基本上我想將從網絡對端獲得的8KHz數據上採樣到48KHz並使用WASAPI播放。

回答

2

您對重採樣器的輸入可能是BufferedWaveProviderRawSourceWaveStream。不過,您不能使用CreateWaveFile16實時重新採樣。您只需要讀取預計可用的音頻數量並將其寫入WAV文件。

+0

WdlResamplingSampleProvider接受一個實現ISampleProvider的對象,但BufferedWaveProvider和RawSourceWaveStream都實現了IWaveProvider。這是否意味着我需要實現實現ISampleProvider的自定義BufferedWaveProvider還是有其他解決方法? – Curious

+0

而且我不需要寫入wav文件。相反,我想用WASAPI播放上採樣音頻數據。我認爲我形成這個問題的方式讓你感到困惑。因此,更新問題 – Curious

+1

@Fadi有一個.ToSampleProvider擴展方法可以使用。但是,如果您只是想用WASAPI播放上採樣數據,那麼只需將BufferedWaveProvider傳遞給WasapiOut,因爲我已將重採樣器放入WasapiOut。 –