自定义AudioNode自动化

时间:2015-08-18 06:22:36

标签: javascript web-audio

我正在寻找一种创建自定义AudioNode的方法,并且能够像原生AudioNode一样调制其AudioParams。即LFO.connect。(gainNode.gain)。

就我而言,我想创建一个CrossFader节点(A,B),并能够使用OscillatorNode调整其在A,B之间的混合。

我认为这是一个功能性但不可自动化的起点:

function crossFade(val, max, inputA, inputB) {
    var x = parseInt(val) / parseInt(max),
        gain1 = Math.cos(x * 0.5 * Math.PI),
        gain2 = Math.cos((1.0 - x) * 0.5 * Math.PI);

    inputA.gain.value = gain1;
    inputB.gain.value = gain2;
}

由于

2 个答案:

答案 0 :(得分:1)

我认为你想要这样的东西:

function CrossFade(){
    this.inputA = context.createGain();
    this.inputB = context.createGain();
    this.fade = function(val, max) {
        var x = parseInt(val) / parseInt(max),
            gain1 = Math.cos(x * 0.5 * Math.PI),
            gain2 = Math.cos((1.0 - x) * 0.5 * Math.PI);

        inputA.gain.value = gain1;
        inputB.gain.value = gain2;
    }
}

这样,当您执行var c = new CrossFade()时,您可以将曲目连接到c.inputA或c.inputB。然后,您可以自由地将调制器连接到这些增益音频节点(如果您想使用单个振荡器作为两个输入的调制器,则可能必须使用脚本处理器节点来反转振荡器的相位立刻)。

(注意你应该把fade方法放在原型上,但为了简洁,我在这里使用了这个语法。)

答案 1 :(得分:0)

自动交叉推子的一种可能方法。创建由线性斜坡组成的缓冲源。创建两个WaveShaperNodes,其中曲线与Math.cos公式匹配。将缓冲源连接到每个WaveShaperNode,并将每个WaveShaperNode的输出连接到要自动化的增益节点。在您希望交叉推子开始的时间点启动源节点。

我认为这会做你想要的。