2012-12-04 99 views
7

我正在玩的webkit音頻API,我試圖創建一個回聲效果,以實現我已經在循環中連接了一個帶有GainNode的DelayNode(輸出一個是另一個的輸入,反之亦然)。使用網絡音頻創建自定義回聲節點

Echo Node

的影響正常工作,但現在我想創建一個EchoNode對象,我可以只插件,並與其他AudioNode連接對象。

喜歡的東西:

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

我想我應該讓從AudioNode我EchoNode繼承,讓每一個其他AudioNode的連接功能將工作,但我不知道怎麼做,在Javascript與網絡音頻API。

任何人都可以給我一個提示,或者如果你認爲有更好的方法來完成,我將不勝感激。

感謝

+0

有一個名爲TUNA.js的效果庫,您可能想要查看其代碼庫。 – William

+0

是的,它在奧斯卡的文章末尾提到。它看起來非常酷,我會檢查出來。另外它會給我一個提高我的Javascript的機會,我知道它有點弱。謝謝 – dgiulian

回答

7

奧斯卡的解決方案應該做的伎倆,但我想指出的是,它會要求你連接到你的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,但它提供的反饋作用附加增益節點。