2013-08-27 21 views
0

我開始研究VOIP計劃以瞭解VOIP的一些基本知識。我主要工作,但我在將系統轉換爲使用WaveMixerStream32後遇到了問題。轉換爲在WaveMixerStream32中使用的BufferedWaveProvider可降低音頻音調

我的程序使用16位波形格式讀取來自WaveIn的輸入,用Speex編解碼器對其進行壓縮,然後通過網絡將它發送到客戶端。起初,我一直在錯誤地使用BufferedWaveProvider,這使我使用WaveMixerStream32進行了研究。但是,爲了使用它,我需要將BufferedWaveProvider轉換爲WaveStream32,然後才能在WaveMixerStream32中使用。

我使用的轉換代碼是:

provider = new BufferedWaveProvider(format) { DiscardOnBufferOverflow = true }; 
wave16ToFloat = new Wave16ToFloatProvider(provider); // I have tried with and without this converter. 
wpws = new WaveProviderToWaveStream(wave16ToFloat); 
channel = new WaveChannel32(wpws); 

我得到了IWaveProvider到的WaveStream轉換器從This Question

我那麼最終流添加到WaveMixerStream32這樣的:

waveMixer.AddInputStream(channel); 

雖然它比我原來的好很多,在球場上最後的聲音比輸入顯著更深。

我在做什麼錯誤/我該如何解決它?

+1

如果它聽起來像「盧克,我是你的父親」,那麼你就錯了。樣本量中有一個因子2。 –

+0

我發現它與採樣率相關,並改爲48kHz,結果發現我聽起來像剛剛吸入大量氦氣。我只是在開始時改變了採樣率,因爲我使用的編解碼器Speex的最大采樣率設置爲32kHz。然而,最終的採樣率竟然是44.1kHz。 – Zachar543

+0

這聽起來像你有一個比你接受的更好的答案。請不要害羞。 –

回答

2

很可能您正在播放立體聲音頻,就好像它是單聲道的。這會使球場減半。檢查WaveFormat在信號鏈中每個點上的期望值。請注意,WaveChannel32將會將單聲道變成立體聲。

+0

謝謝,原來是單聲道/立體聲和不匹配採樣率的組合。 – Zachar543

1

在遵循Mark和Hans的回答並修改了採樣率之後,我發現我的WaveOutput期望44.1kHz的採樣率,而我只給它32kHz。我最初將WaveIn採樣率設置爲32kHz,因爲我期望我的編解碼器Speex需要採樣率才能正常工作(它的採樣率設置僅高達32kHz)。但是,將WaveIn採樣率更改爲44.1kHz後,所有音高問題都消失了。