2012-12-04 11 views
7

gram z WebKit audio API i próbuję stworzyć efekt echa, aby osiągnąć cel, który mam podłączony DelayNode z GainNode w pętli (Wyjście jeden jest wejściem drugiego i viceversa).Tworzenie niestandardowych echa węzeł z internetowej Audio

Echo Node

Efekt działa dobrze, ale teraz chcę utworzyć obiekt EchoNode że mogę po prostu podłączyć i łączyć się z innymi obiektami AudioNode.

Coś jak:

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

myślę, że powinny być moje EchoNode dziedziczą z AudioNode, tak że funkcja connect każdego innego AudioNode będzie działać, ale nie wiem, jak to zrobić w JavaScript z webowym interfejsem API audio.

Czy ktoś może dać mi wskazówkę, lub jeśli uważasz, że istnieje lepsza droga do osiągnięcia, że ​​będę bardzo wdzięczny.

Dzięki

+0

Jest biblioteka efektów nazywa TUNA.js które warto rzucić okiem na podstawie kodu. – William

+0

Tak, jest to wspomniane na końcu artykułu Oskara. Wygląda naprawdę fajnie, sprawdzę to. Dodatkowo da mi szansę na ulepszenie mojej Javascript, która, jak wiem, jest słaba. Dzięki – dgiulian

Odpowiedz

7

Rozwiązanie Oskara powinno wystarczyć, ale chcę zaznaczyć, że będzie wymagało połączenia się z EchoNode w niestandardowy sposób (używając EchoNode.input zamiast po prostu połączyć się z samym EchoNode). W przypadku prostych efektów, takich jak opóźnienie sprzężenia zwrotnego, można tego uniknąć, tworząc EchoNode za pomocą funkcji fabrycznej, która zwraca natywny DelayNode pomieszany z pewnymi dodatkowymi właściwościami. Oto przykład z 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); 
}; 

Jak widać, wynik jest rodowitym DelayNode, które mogą być podłączone do innych węzłów w standardowy sposób, ale ma załączony węzeł wzmocnienia, która zapewnia efekt sprzężenia zwrotnego.

Powiązane problemy