7

Webkit Audio API で遊んでいて、Echo エフェクトを作成して、DelayNode と GainNode をループで接続したことを達成しようとしています (一方の出力は他方の入力であり、その逆です)。 .

エコー ノード

エフェクトは正常に動作しますが、プラグインして他の AudioNode オブジェクトに接続できる EchoNode オブジェクトを作成したいと考えています。

何かのようなもの:

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

他のすべてのAudioNodeの接続機能が機能するように、EchoNodeをAudioNodeから継承させる必要があると思いますが、JavascriptでWeb Audio APIを使用してそれを行う方法がわかりません。

誰かが私にヒントを与えることができますか、それを達成するためのより良い方法があると思うなら、私は大いに感謝します.

ありがとう

4

2 に答える 2

8

Oskar のソリューションでうまくいくはずですが、EchoNode に非標準の方法で接続する必要があることを指摘したいと思います (EchoNode.input単に EchoNode 自体に接続するのではなく、使用します)。フィードバック遅延などの単純な効果の場合、これは、いくつかの追加プロパティと混合されたネイティブ DelayNode を返すファクトリ関数を介して EchoNode を作成することで回避できます。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 ですが、フィードバック効果を提供するゲイン ノードが接続されています。

于 2012-12-05T22:28:28.747 に答える
3

私が書いたこの記事を見てください。いくつかのアイデアが得られるかもしれません。 .

于 2012-12-05T09:41:10.083 に答える