2012-10-05 14 views
12

का उपयोग करके 10-बैंड इक्वाइज़र बनाना, मैं
Winamp के 10-बैंड तुल्यकारक जैसे कुछ को फिर से बनाने के लिए वेब ऑडियो एपीआई का उपयोग करके अपने सिर को लपेटने की कोशिश कर रहा हूं।वेब ऑडियो एपीआई

Winamp's 10-band equalizer

मैं क्या इकट्ठा कर सकते हैं से, मैं 10 Biquad Filters बनाने के लिए, उनके type को 2 (for a Bandpass filter) की स्थापना की और क्रमश: उनके frequency[60, 170, 310, 600, 1000, 3000, 6000, 12000, 14000, 16000] करने के लिए सेट। एक बार मैंने ऐसा किया है (और यहां वह जगह है जहां मुझे थोड़ी उलझन में आ रहा है) तो मैं प्रत्येक आवृत्ति "बैंड" के लिए अलग Gain Node बनाउंगा और इसके मान को स्लाइडर से बांध दूंगा।

<input id="someFreqBand" type="range" min="-12" max="12" step="0.1" value="0" onchange="slide()"/> 

यह मानते हुए कि के सभी सही है, तो ही शेष कदम ऑडियो संदर्भ destination (जो मैं सभी 10 आवृत्ति "बैंड" लेने के लिए और मिश्रण होगा/उन्हें वापस एक साथ सिंक की कल्पना करना सभी 10 लाभ नोड्स कनेक्ट करने के लिए है)। क्या यह वेब ऑडियो 10-बैंड तुल्यकारक बनाने के बारे में जाने का सही तरीका है?

प्रमुख बात यह है कि मैं उलझन में हूं कि मैं स्रोत को "आवृत्ति" के बारे में 10 आवृत्ति बैंड फ़िल्टर (+ संबंधित लाभ नोड) के बारे में कैसे जाता हूं क्योंकि सभी नोड्स में केवल एक इनपुट या आउटपुट होता है (गंतव्य सहित) ।

उत्तर

7

मैट डी ने कहा, फ़िल्टर को उसी गंतव्य पर जोड़ने में कोई समस्या नहीं होनी चाहिए।

हालांकि मैं कहूंगा कि आप शायद टाइप 5 (पीकिंग) के साथ फ़िल्टर का उपयोग करना चाहते हैं, जो आवृत्ति पर केवल आवृत्तियों को कम करता है और कम करता है जिस पर आपने संबंधित फ़िल्टर सेट किया है। Frequency.value। इससे आपको फ़िल्टर को श्रृंखला में कनेक्ट करने की सुविधा मिलती है ताकि आपको 10 अलग-अलग ऑडियो पथों की आवश्यकता न हो। आप पहले फ़िल्टर के रूप में लो-शेल्फ फ़िल्टर का उपयोग करने पर विचार कर सकते हैं, और एक हाई-शेल्फ फ़िल्टर दसवीं के रूप में, जो बराबर में समान है। मुझे याद नहीं है कि क्या Winamp करता है, हालांकि।

अंत में, यदि आप श्रृंखला में पीकिंग फ़िल्टर के साथ जाते हैं, तो आपको प्रत्येक आवृत्ति के लिए एक अलग लाभ नोड की आवश्यकता नहीं है, तो आप विशिष्ट फ़िल्टर के लिए filter.gain.value सेट करें।

+0

जब तक मैं गलत नहीं हूं, सभी ग्राफिक तुल्यकारक बैंडपास फ़िल्टर का उपयोग करते हैं। पेज 4 पर यहां देखें: https://rs6.eporia.com/company_38/techpaper106.pdf यह अजीब लगता है कि कम शेल्फ/उच्च-शेल्फ/पीकिंग फ़िल्टर आपको फ़िल्टर नोड पर सीधे लाभ समायोजित करने की अनुमति देता है , लेकिन बैंडपास फिल्टर नहीं ... – idbehold

+0

मुझे यकीन नहीं है कि सभी ग्राफिक तुल्यकारक बैंडपास फ़िल्टर का उपयोग करते हैं, लेकिन मुझे यकीन है कि श्रृंखला में पीकिंग फ़िल्टर का उपयोग करना आपके द्वारा किए जाने वाले व्यवहार को प्राप्त करने का आसान तरीका होगा। –

+0

फ़िल्टरों को श्रृंखला में जोड़ा जाना चाहिए, जैसा कि जगी ने उल्लेख किया था। –

2

प्रमुख बात मैं लेकर संदेह में हूँ है कि कैसे मैं के बाद से सभी नोड्स केवल एक ही इनपुट या आउटपुट है के बारे में 10 आवृत्ति बैंड फिल्टर (+ जुड़े लाभ नोड) के लिए स्रोत "जोड़ने" जाना (सहित गंतव्य)।

यह सच है, लेकिन इसके बारे में एक भौतिक आउटपुट की तरह मत सोचो जो केवल किसी अन्य भौतिक इनपुट से जुड़ा जा सकता है। एक वेब ऑडियो नोड का एक एकल आउटपुट एकाधिक नोड्स से जोड़ा जा सकता है, और एक नोड भी कई इनपुट प्राप्त कर सकता है। उदाहरण के लिए, मान लीजिए कि आप समानांतर में 5 फ़िल्टर के माध्यम से इनपुट नोड को चेन करना चाहते हैं और फिर उन्हें एक साथ वापस शामिल करना चाहते हैं। आप कुछ इस तरह कर सकता है:

source.connect(filter1); 
source.connect(filter2); 
source.connect(filter3); 
source.connect(filter4); 
source.connect(filter5); 

filter1.connect(context.destination); 
filter2.connect(context.destination); 
filter3.connect(context.destination); 
filter4.connect(context.destination); 
filter5.connect(context.destination); 

यहाँ कुंजी अंतर्दृष्टि है कि कई बार .connect बुला एक अलग नोड के लिए उत्पादन में परिवर्तन नहीं होगा, लेकिन बस अतिरिक्त उत्पादन कनेक्शन जोड़ देगा है। दूसरे शब्दों में, यह एक "प्रशंसक बाहर/प्रशंसक" प्रणाली है।

+0

यह स्पेक कहता है जब यह खराब दस्तावेज की तरह लगता है: 'संख्याऑफ इनपुट: 1. संख्याऑफ आउटपुट: 1.' जब' 1' 'से उनका मतलब' बहुत 'है। – idbehold

+1

मैं स्वीकार करता हूं कि यह स्पष्ट हो सकता है, लेकिन वह दस्तावेज अभी भी सही है। एक आउटपुट एकाधिक इनपुट से कनेक्ट हो सकता है। आउटपुट के बजाय आउटपुट * पोर्ट्स * की संख्या की तरह इसके बारे में सोचें। –

10

गंतव्य के साथ प्रत्येक फ़िल्टर को जोड़कर आप 5 पथ (मार्ग) बना रहे हैं ताकि आप स्रोत ध्वनि के क्विंटुपलिंग एम्पलीफिकेशन को सुन सकें। यह सही तरीका नहीं है। आपको प्रत्येक फ़िल्टर को एक पंक्ति में जोड़ना होगा।

source.connect(filter1); 
filter1.connect(filter2); 
filter2.connect(filter3); 
filter3.connect(filter4); 
filter4.connect(filter5); 
filter5.connect(context.destination); 
संबंधित मुद्दे