首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于上采样的PCM算法

用于上采样的PCM算法
EN

Stack Overflow用户
提问于 2011-03-23 23:17:13
回答 4查看 5.1K关注 0票数 2

我有8k16bit的pcm音频,我想把它放大到16k16bit。我必须手动完成此操作。

谁能告诉我线性插值的算法?我应该在每两个字节之间进行插值吗?

另外,当我上采样时,我必须对wav报头进行更改-我应该更改什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-24 08:12:51

正如其他人所提到的,线性插值不能提供最好的音质,但它简单且便宜。

对于你创建的每个新样本,只需将其与下一个样本平均,例如

代码语言:javascript
复制
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或类似的工具来做这件事。

票数 7
EN

Stack Overflow用户

发布于 2011-03-24 00:55:06

谁能告诉我线性插值的算法?我应该在每两个字节之间进行插值吗?

当然:

代码语言:javascript
复制
double interpolate_linear(double a, double b, double x) {
    assert(0.0 <= x);
    assert(1.0 >= x);

    if (0.0 >= x)
        return a;
    else if (1.0 <= x)
        return b;
    else
        return (1.0 - x) * a + x * b;
}

线性插值,虽然总比没有好,但误差很大。如果你有足够的cpu时间,最好是零填充和窗口。

另外,当我上采样时,我必须对wav报头进行更改-我应该更改什么?

不确定是否支持java。

票数 2
EN

Stack Overflow用户

发布于 2011-03-24 09:33:04

这里有一个用java处理WAV文件的很好的链接:

http://www.labbookpages.co.uk/audio/javaWavFiles.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5407452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档