C ++上采样22050到48000 Hz的原始音频

时间:2013-05-05 07:22:13

标签: c++ windows audio sampling

我有

形式的原始音频数据
vector<short> m_shorts;

音频数据为22050 kHz单声道。

有没有人知道我怎么能(没有任何第三方库)快速将短矢量转换为48000 Hz单声道?

我知道它不会改善声音。这仅用于将音频数据传递到效果(在采样率较高时听起来更好)。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

如果您想将采样频率从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; ix++) { // not sure of the bounds
  output[2*ix] = m_shorts[ix];
  output[2*ix+1] = (m_shorts[ix] + m_shorts[ix+1])/2;
}

但我不是音频或信号处理专家。可能有更聪明的方法......(也许是Fourier transform然后是反傅立叶)。

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