Audio 使用web音频自动实现双输入混音

Audio 使用web音频自动实现双输入混音,audio,web-audio-api,Audio,Web Audio Api,我想实现一个双输入混音器,就像你在效果插件中找到的那样,在那里你可以控制你想要的效果数量。控制一个我们称之为“混合”的值,你可以从只有效果的声音变成只有原始声音或介于两者之间的任何声音 使用两个增益节点非常容易: gainNode1.gain.value = mix; gainNode2.gain.value = 1-mix; 然后我们将两个增益节点发送到输出 问题是我想用指数RamptoValueAttime()将其自动化。如果我调用gainNode1上的指数RamptoValueAttim

我想实现一个双输入混音器,就像你在效果插件中找到的那样,在那里你可以控制你想要的效果数量。控制一个我们称之为“混合”的值,你可以从只有效果的声音变成只有原始声音或介于两者之间的任何声音

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

gainNode1.gain.value = mix;
gainNode2.gain.value = 1-mix;
然后我们将两个增益节点发送到输出

问题是我想用指数RamptoValueAttime()将其自动化。如果我调用gainNode1上的指数RamptoValueAttime,我希望另一个函数遵循公式(1-gain1)


有什么方法可以做到这一点吗?

这里是一个简单的方法。(完全未经测试!)

这样做的目的是创建一个具有指数渐变的gainExp节点。这将输入到gainNode1的增益中,以便将该斜坡应用于gainNode1的输入


gainNode2有来自GainNexp和gainNeg的增益参数输入,因此gainNode2的增益是1-mix(根据需要)。

这是个好主意,我从未想过使用负增益。我会尽快测试它,看看它是否有效。与gainNode2.gain的连接错误。gainExp不应连接到gainNode2.gain。我认为将gainNeg连接到gainNode2.gain并设置gainNode2.gain.value=1就足够了。结果增益应为1-斜坡。让我知道它是否有效!工作完美。谢谢!
// 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);