Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用web音频创建自定义回显节点_Javascript_Web Audio Api - Fatal编程技术网

Javascript 使用web音频创建自定义回显节点

Javascript 使用web音频创建自定义回显节点,javascript,web-audio-api,Javascript,Web Audio Api,我正在玩webkit音频API,我正在尝试创建一个回音效果,以实现我在一个循环中连接了一个DelayNode和一个GainNode(一个的输出是另一个的输入,反之亦然) 效果很好,但是现在我想创建一个EchoNode对象,我可以插入并连接其他AudioNode对象 比如: myEchoNode = new EchoNode(); myConvolverNode = context.createConvolver(); myConvolverNode.connect(myEchoNode);

我正在玩webkit音频API,我正在尝试创建一个回音效果,以实现我在一个循环中连接了一个DelayNode和一个GainNode(一个的输出是另一个的输入,反之亦然)

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

比如:

myEchoNode = new EchoNode(); 
myConvolverNode = context.createConvolver();
myConvolverNode.connect(myEchoNode);
我认为我应该让我的EchoNode从AudioNode继承,这样其他每个AudioNode的连接功能都可以工作,但我不知道如何在Javascript中使用web Audio API实现这一点

谁能给我一个提示,或者如果你认为有更好的方法来实现这一点,我将不胜感激


谢谢

看看我写的这篇文章,它可能会给你一些想法:(这解释了道家推荐的tuna.js背后的基本思想)

Oskar的解决方案应该可以做到这一点,但我想指出的是,它需要您以非标准方式连接到EchoNode(使用
EchoNode.input
,而不是简单地连接到EchoNode本身)。对于反馈延迟等简单效果,可以通过一个工厂函数创建EchoNode来避免这种情况,该工厂函数返回一个混合了一些额外属性的本地DelayNode。下面是一个例子:


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

有一个名为TUNA.js的效果库,您可能想浏览一下它的代码库。是的,Oskar的文章末尾提到了它。看起来很酷,我去看看。另外,它将给我一个机会来改进我知道有点弱的Javascript。谢谢这正是我想要的,非常感谢!顺便说一下,这篇文章很棒。
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);
};