原始音頻I具有原始音頻數據中的C++從上採樣到22050 48000赫茲
vector<short> m_shorts;
形式的音頻數據是22050千赫單聲道。
有沒有人有任何想法我可以(沒有任何第三方庫)快速轉換爲48000赫茲單聲道的短矢量?
我知道它不會改善聲音。這僅用於將音頻數據傳遞給一個效果(在採樣率更高的情況下聽起來會更好)。
謝謝你的幫助。
原始音頻I具有原始音頻數據中的C++從上採樣到22050 48000赫茲
vector<short> m_shorts;
形式的音頻數據是22050千赫單聲道。
有沒有人有任何想法我可以(沒有任何第三方庫)快速轉換爲48000赫茲單聲道的短矢量?
我知道它不會改善聲音。這僅用於將音頻數據傳遞給一個效果(在採樣率更高的情況下聽起來會更好)。
謝謝你的幫助。
如果你想從22050Hz
採樣頻率翻一番,44100Hz
(這是22050雙),你可能會做一些linear interpolation:
vector<short> m_shorts;
vector<short> outputs;
unsigned inplen = m_shorts.length();
output.resize(2*inplen+1);
for (unsigned ix = 0; ix < inplen-1; ix++) {
output[2*ix] = m_shorts[ix];
output[2*ix+1] = (m_shorts[ix] + m_shorts[ix+1])/2;
}
但我不是一個音頻或信號處理專家。可能有更聰明的方法......(也許是一個Fourier transform然後是一個逆傅立葉)。
我不確定「聽起來會好些」。
非常感謝! – tmighty 2013-05-05 07:36:02
線性插值工作正常,但不能給出非常好的結果。理想情況下,應使用適當的重採樣濾波器。 – 2013-05-05 09:24:10
這種過採樣操作會導致11.025kHz至22.05kHz範圍內的原始信號(稱爲混疊或圖像)中不存在的不需要的信號內容。在所有實際的上採樣設計中,這由LPF去除。這裏使用的兩點插值是一個非常粗糙的LPF,它最有可能在錯誤的地方有一個截止頻率和一個非常寬的阻帶。結果是大量的混疊正在發生。 你需要一個重採樣濾波器,它的拐點頻率在11.025kHz(或稍小一點)和急劇滾降。 – marko 2013-05-05 10:39:54
你想要'44100Hz'('22050Hz'的雙倍頻)還是'48000Hz'?而'kHz'很可能是一個錯字,應該是'Hz' – 2013-05-05 07:25:45
@Basile Starynkevitch對不起,你說得對。我想我寧願48000赫茲。但是如果48000不容易,44100也可以。 – tmighty 2013-05-05 07:28:42
然後請相應地編輯您的問題。 – 2013-05-05 07:31:55