原始音频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