2012-12-04 14 views
7

के साथ एक कस्टम इको नोड बनाना मैं वेबकिट ऑडियो एपीआई के साथ खेल रहा हूं और मैं एक इको प्रभाव बनाने की कोशिश कर रहा हूं, यह पूरा करने के लिए कि मैंने एक लूप में एक GainNode के साथ एक DelayNode कनेक्ट किया है (आउटपुट एक दूसरे का इनपुट है, और उपाध्यक्ष)।वेब-ऑडियो

Echo Node

प्रभाव ठीक काम करता है, लेकिन अब मैं एक EchoNode वस्तु है कि मैं सिर्फ प्लग-इन कर सकते हैं और अन्य AudioNode वस्तुओं के साथ कनेक्ट बनाना चाहते हैं।

कुछ की तरह:

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

मुझे लगता है कि मैं AudioNode से मेरी EchoNode इनहेरिट करना चाहिए, ताकि हर दूसरे AudioNode के कनेक्ट समारोह काम करेगा, लेकिन मैं जावास्क्रिप्ट में करने के लिए है कि पता नहीं कैसे वेब ऑडियो एपीआई के साथ।

क्या कोई मुझे संकेत दे सकता है, या यदि आपको लगता है कि इसे पूरा करने का एक बेहतर तरीका है तो मैं इसकी सराहना करता हूं।

धन्यवाद

+0

एक प्रभाव पुस्तकालय है जिसे TUNA.js कहा जाता है जिसे आप कोड बेस पर नज़र रखना चाहते हैं। – William

+0

हां, ओस्कर के लेख के अंत में इसका उल्लेख है। यह वास्तव में अच्छा लग रहा है, मैं इसे देख लूंगा। इसके अलावा यह मुझे अपने जावास्क्रिप्ट को बेहतर बनाने का मौका देगा जो मुझे पता है कि थोड़ी कमजोर है। धन्यवाद – dgiulian

उत्तर

1

इस लेख मैंने लिखा पर एक नजर डालें, तो यह आपको कुछ विचार दे सकता है: http://www.html5rocks.com/en/tutorials/casestudies/jamwithchrome-audio/ (जो मूल विचार के पीछे बताते tuna.js कि ताओवादी अनुशंसित)।

+0

ठीक वही है जो मैं खोज रहा था, बहुत बहुत धन्यवाद! किसी तरह से बहुत अच्छा लेख। – dgiulian

7

ओस्कर के समाधान को चाल चलनी चाहिए, लेकिन मैं यह इंगित करना चाहता हूं कि आपको अपने इकोनोड को गैर-मानक तरीके से कनेक्ट करने की आवश्यकता होगी (EchoNode.input का उपयोग करके केवल इकोनोड से कनेक्ट होने के बजाय)। फीडबैक देरी जैसे सरल प्रभावों के लिए, यह एक फैक्ट्री फ़ंक्शन के माध्यम से इकोनोड बनाकर टाला जा सकता है जो कुछ अतिरिक्त गुणों के साथ मिश्रित मूल डेलेनोड लौटाता है। यहाँ 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 मानक ढंग से अन्य नोड से जोड़ा जा सकता है कि है, लेकिन यह एक संलग्न लाभ नोड कि प्रतिक्रिया प्रभाव प्रदान करता है।