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

Automating a two-input mix with web audio

我想实现一个双输入混音器,就像您在效果器插件中找到的那样,您可以在其中控制所需的效果量。控制一个我们可以称为 'mix' 的值,您可以从只有带有效果的声音到只有原始声音或介于两者之间的任何东西。

有两个增益节点就很容易了:

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

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

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

有什么办法吗?

这是执行此操作的一种方法的草图。 (完全未经测试!)

// 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 - 根据需要混合。