java - 用于上采样的 PCM 算法

标签 java audio interpolation sampling pcm

我有 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/

相关文章:

list - 获取 Terraform 中列表的总数

java - 检查android studio中是否存在共享首选项

Android ffmpeg 无法将音频(.wav 文件)与视频(.mp4 文件)合并

android - 某些网址的广播流失败

c++ - 多线程,线程同步

time-series - 在 Stata 中插值数值而不创建新变量

java - 直接统计重复子串的出现次数

java - 如何从单击按钮的代码中进行调用?

java - 跟踪在 javafx 中绑定(bind)的节点的变化

vue.js - Vue - 属性内插值