我有 8k16 位 pcm 音频,我想将其上采样到 16k16 位。我必须手动执行此操作。
谁能告诉我线性插值的算法?我应该在每两个字节之间进行插值吗?
此外,当我进行上采样时,我必须对 wav header 进行更改 - 我应该更改什么?
最佳答案
正如其他人所提到的,线性插值并不能提供最佳音质,但它既简单又便宜。
对于您创建的每个新样本,只需将其与下一个样本进行平均,例如
short[] source = ...;
short[] result = new short[source.length * 2];
for(int i = 0; i < source.length; ++i) {
result[i * 2] = source[i];
result[i * 2 + 1] = (source[i] + source[i + 1]) / 2;
}
您绝对应该搜索可帮助您处理 WAV 文件的库。尽管它是一种简单的格式,但如果有可用的代码可以满足您的需要,您就不必自己这样做。顺便问一下,你为什么要这样做?也许您可以只使用 sox 或类似工具来执行此操作。
关于java - 用于上采样的 PCM 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5407452/