使用网络音频自动化双输入混音

时间:2016-03-12 09:01:14

标签: audio web-audio

我想实现一个双输入混音器,就像你在效果插件中找到的那样,你可以控制所需的效果。控制一个我们可以称之为“混音”的值你可以只从有效的声音到只有原始声音或其间的任何声音。

使用两个增益节点非常容易:

gainNode1.gain.value = mix;
gainNode2.gain.value = 1-mix;

然后我们将两个增益节点都发送到输出。

问题是我想用exponentialRampToValueAtTime()自动化它。如果我在gainNode1上调用exponentialRampToValueAtTime,我希望另一个跟随公式(1-gain1)。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:2)

这是一种实现此目的的方法草图。 (完全未经测试!)

// src is a constant source whose value is 1.
var gainExp = context.createGain();
var gainNeg = context.createGain();
gainNeg.gain.value = -1;

src.connect(gainExp);
gainExp.connect(gainNeg);
gainNode1.gain.value = 0;
gainExp.connect(gainNode1.gain);
gainNode2.gain.value = 0;
gainNeg.connect(gainNode2.gain);
gainExp.connect(gainNode2.gain);

gainExp.gain.exponentialRampToValueAtTime(value, time);

这样做是创建一个具有指数斜坡的gainExp节点。这将增加gainNode1的增益,以便将此斜坡应用于gainNode1的输入。

gainNode2的增益参数输入来自gainExp和gainNeg,因此gainNode2的增益为1 - 根据需要进行混合。