我正在玩 webkit 音频 API,我正在尝试创建回声效果,以实现我在循环中将 DelayNode 与 GainNode 连接(一个的输出是另一个的输入,反之亦然)。
效果很好,但现在我想创建一个 EchoNode 对象,我可以将其插入并与其他 AudioNode 对象连接。
类似于:
myEchoNode = new EchoNode();
myConvolverNode = context.createConvolver();
myConvolverNode.connect(myEchoNode);
我认为我应该让我的 EchoNode 继承自 AudioNode,这样每个其他 AudioNode 的连接功能都可以工作,但我不知道如何在 Javascript 中使用 Web Audio API 来做到这一点。
任何人都可以给我提示,或者如果您认为有更好的方法来完成,我将不胜感激。
谢谢
最佳答案
Oskar 的解决方案应该可以解决问题,但我想指出它需要您以非标准方式连接到您的 EchoNode(使用 EchoNode.input
而不是简单地连接到 EchoNode 本身).对于诸如反馈延迟之类的简单效果,可以通过工厂函数创建 EchoNode 来避免这种情况,该工厂函数返回混合了一些额外属性的 native DelayNode。这是来自 SynthJS 的示例:
function FeedbackDelayNode(context, delay, feedback){
this.delayTime.value = delay;
this.gainNode = context.createGainNode();
this.gainNode.gain.value = feedback;
this.connect(this.gainNode);
this.gainNode.connect(this);
}
function FeedbackDelayFactory(context, delayTime, feedback){
var delay = context.createDelayNode(delayTime + 1);
FeedbackDelayNode.call(delay, context, delayTime, feedback);
return delay;
}
AudioContext.prototype.createFeedbackDelay = function(delay, feedback){
return FeedbackDelayFactory(this, delay, feedback);
};
如您所见,结果是一个可以以标准方式连接到其他节点的 native DelayNode,但它有一个附加的增益节点来提供反馈效果。
关于javascript - 使用网络音频创建自定义回声节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13702733/