javascript:插入一个数字数组

时间:2014-11-15 00:39:00

标签: javascript arrays interpolation

几个月前,我正在寻找一种方法,使用HTML5对从麦克风捕获的音频数据进行下采样。我需要输出速率为12000Hz,如果输入是它的直接乘法(即48000Hz)我没有问题,但它似乎很复杂其他速率(例如44100Hz)。

在这些情况下,直接下采样(每4只保留1次)不会起作用,所以我想到插值,但是stackoverflow当时没有解决方案。所以自己回答。

1 个答案:

答案 0 :(得分:6)

我的解决方案的source

fiddle demo

插值数组的代码,

function interpolateArray(data, fitCount) {

    var linearInterpolate = function (before, after, atPoint) {
        return before + (after - before) * atPoint;
    };

    var newData = new Array();
    var springFactor = new Number((data.length - 1) / (fitCount - 1));
    newData[0] = data[0]; // for new allocation
    for ( var i = 1; i < fitCount - 1; i++) {
        var tmp = i * springFactor;
        var before = new Number(Math.floor(tmp)).toFixed();
        var after = new Number(Math.ceil(tmp)).toFixed();
        var atPoint = tmp - before;
        newData[i] = linearInterpolate(data[before], data[after], atPoint);
    }
    newData[fitCount - 1] = data[data.length - 1]; // for new allocation
    return newData;
};

使用它的例子:

var originalArry = [1,5,3];
var newArry = interpolateArray([1,5,3],5);