我想实现一个双输入混音器,就像你在效果插件中找到的那样,你可以控制所需的效果。控制一个我们可以称之为“混音”的值你可以只从有效的声音到只有原始声音或其间的任何声音。
使用两个增益节点非常容易:
gainNode1.gain.value = mix;
gainNode2.gain.value = 1-mix;
然后我们将两个增益节点都发送到输出。
问题是我想用exponentialRampToValueAtTime()自动化它。如果我在gainNode1上调用exponentialRampToValueAtTime,我希望另一个跟随公式(1-gain1)。
有没有办法做到这一点?
答案 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 - 根据需要进行混合。