关闭和上采样后的音频关闭

时间:2016-07-17 22:52:12

标签: javascript audio web-audio resampling

我尝试再次向上和向下采样麦克风音频(用于传输)。但是在这个过程之后音频有点坏了(关闭)。如果您有麦克风,可以自己试试:

FIDDLE: https://jsfiddle.net/q4yjfxqv/10/(已更新21.07.16)

你会听到更高频率的关闭。

我通过删除一半数组

进行缩减采样
get()

上传(liniar)

Future

我尝试了其他插值方法,如liniar,cubic和lanczos形式here ......具有相同的快门效果。

快门始终发生在大块边缘。您可以通过在示例中将块大小从1024切换到4096来听到这一点(它会发生更少)。

但为什么呢?任何人都可以解决这个问题以及如何解决?

赞赏任何提示:)

4 个答案:

答案 0 :(得分:0)

我不是音频节目专家。

当我得到奇怪的结果(带有一般编程问题)时,我尝试的是改变算法的参数并将其恢复到基础。

当你不下采样时会发生什么?。

即使是最小的错误,音频也非常敏感。 如果缓冲区不够大或何时(使用主线程)处理块播放声音怎么办。

除了在此线程上进行调制之外,您还在进行任何其他处理吗? 那个不同的(HTML5)浏览器怎么样? 目前我无法想到任何其他解决方案或提示。

祝你好运,我希望这会有所帮助。 请发布解决方案,这将有助于其他程序员。

答案 1 :(得分:0)

根据您运行的操作系统和计算机,您可能希望增加creatScriptProcessor中指定的缓冲区大小。随着你的尺寸,我听到了文物,但当我把尺寸增加到16384时,我不再听到这些文物了。 (但是现在我听到很长的延迟时间才能听到任何声音,正如大缓冲区大小所预料的那样)。

答案 2 :(得分:0)

当i =(data.length-1)时,你将获得数据[i + 1]的空值 - 所以上采样可能会将最后一个样本平均为零?

(这不是一个很好的下采样 - 因为它首先没有带宽限制 - 但我希望你知道这一点。)

答案 3 :(得分:0)

插值代码的问题是,您不知道下一个块的第一个样本,因此无法正确插入当前样本的最后一个样本。

要解决此问题,您需要保存一个块中的最后一个样本,以计算下一个块的第一个插值样本。

https://jsfiddle.net/hhb240ms/1/

usSample[0] = (lastSample + data[0]) / 2;
usSample[1] = data[0];
for(var i=1;i<512;i++) {
  usSample[2*i] = (data[i] + data[i-1]) / 2;
  usSample[2*i+1] = data[i]
}
lastSample = data[data.length-1];