使用Web-audio创建自定义echo节点

时间:2012-12-04 12:18:41

标签: javascript web-audio

我正在使用webkit Audio API并且我正在尝试创建一个Echo效果,以实现我已经在循环中连接了一个带有GainNode的DelayNode(一个的输出是另一个的输入,反之亦然。

Echo Node

效果很好,但现在我想创建一个EchoNode对象,我可以插件并与其他AudioNode对象连接。

类似的东西:

myEchoNode = new EchoNode(); 
myConvolverNode = context.createConvolver();
myConvolverNode.connect(myEchoNode);

我认为我应该让我的EchoNode继承AudioNode,以便其他所有AudioNode的连接功能都能正常工作,但我不知道如何使用Web Audio API在Javascript中这样做。

任何人都可以给我一个提示,或者如果你认为有更好的方法可以实现,我会非常感激。

由于

2 个答案:

答案 0 :(得分:8)

Oskar的解决方案应该可以解决问题,但我想指出它需要您以非标准方式连接到您的EchoNode(使用EchoNode.input而不是简单地连接到EchoNode本身)。对于诸如反馈延迟之类的简单效果,可以通过工厂函数创建EchoNode来避免这种情况,该函数返回与一些额外属性混合的本机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);
};

如您所见,结果是一个本机DelayNode,它可以以标准方式连接到其他节点,但它有一个附加的增益节点,可以提供反馈效果。

答案 1 :(得分:2)

看看我写的这篇文章,它可能会给你一些想法:http://www.html5rocks.com/en/tutorials/casestudies/jamwithchrome-audio/(这解释了道教推荐的tuna.js背后的基本思想)。