2013-05-05 34 views
2

原始音频I具有原始音频数据中的C++从上采样到22050 48000赫兹

vector<short> m_shorts; 

形式的音频数据是22050千赫单声道。

有没有人有任何想法我可以(没有任何第三方库)快速转换为48000赫兹单声道的短矢量?

我知道它不会改善声音。这仅用于将音频数据传递给一个效果(在采样率更高的情况下听起来会更好)。

谢谢你的帮助。

+0

你想要'44100Hz'('22050Hz'的双倍频)还是'48000Hz'?而'kHz'很可能是一个错字,应该是'Hz' – 2013-05-05 07:25:45

+0

@Basile Starynkevitch对不起,你说得对。我想我宁愿48000赫兹。但是如果48000不容易,44100也可以。 – tmighty 2013-05-05 07:28:42

+0

然后请相应地编辑您的问题。 – 2013-05-05 07:31:55

回答

2

如果你想从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然后是一个逆傅立叶)。

我不确定“听起来会好些”。

+0

非常感谢! – tmighty 2013-05-05 07:36:02

+0

线性插值工作正常,但不能给出非常好的结果。理想情况下,应使用适当的重采样滤波器。 – 2013-05-05 09:24:10

+1

这种过采样操作会导致11.025kHz至22.05kHz范围内的原始信号(称为混叠或图像)中不存在的不需要的信号内容。在所有实际的上采样设计中,这由LPF去除。这里使用的两点插值是一个非常粗糙的LPF,它最有可能在错误的地方有一个截止频率和一个非常宽的阻带。结果是大量的混叠正在发生。 你需要一个重采样滤波器,它的拐点频率在11.025kHz(或稍小一点)和急剧滚降。 – marko 2013-05-05 10:39:54