के साथ एक रेखा खींचने के लिए कुशल विधि मैं ज़ूम विकल्पों की विस्तृत श्रृंखला के साथ कोको में एक ऑडियो वेवफ़ॉर्म संपादक लिख रहा हूं। इसकी व्यापकता में, यह एक संपूर्ण गीत (~ 10 मिलियन नमूने देखने के लिए) के लिए एक तरंग दिखाता है। इसकी सबसे कम दूरी पर, यह ध्वनि तरंग (एक दृश्य में ~ 1 हजार नमूने) का एक पिक्सेल सटीक प्रतिनिधित्व दिखाता है। मैं इन ज़ूम स्तरों के बीच आसानी से संक्रमण करने में सक्षम होना चाहता हूं। ऐसा लगता है कि एबलेटन लाइव जैसे कुछ वाणिज्यिक संपादक इसे एक बहुत ही सस्ती फैशन में करते हैं।लाखों अंक
मेरा वर्तमान कार्यान्वयन मेरी वांछित ज़ूम रेंज को संतुष्ट करता है, लेकिन अक्षम और चंचल है। डिजाइन काफी हद तक क्वार्ट्ज साथ waveforms ड्राइंग पर इस उत्कृष्ट लेख से प्रेरित:
http://supermegaultragroovy.com/blog/2009/10/06/drawing-waveforms/
मैं कई CGMutablePathRef कमी के विभिन्न स्तरों पर ऑडियो फ़ाइल के लिए के पैदा करते हैं। जब मैं सभी तरह से ज़ूम आउट करता हूं, तो मैं उस पथ का उपयोग करता हूं जो प्रति x-हजार नमूने एक बिंदु तक कम हो गया है। जब मैं सभी तरह से ज़ूम किया जाता हूं, तो मैं उस पथ का उपयोग करता हूं जिसमें प्रत्येक नमूने के लिए एक बिंदु होता है। जब मैं कमी स्तर के बीच में हूं तो मैं क्षैतिज पथ को स्केल करता हूं। यह कार्यात्मक हो जाता है, लेकिन अभी भी काफी महंगा है और कलाकृतियों में कमी आती है जब कमी स्तर के बीच संक्रमण होता है।
एक विचार यह है कि मैं इसे कम महंगा कैसे बना सकता हूं एंटी-एलियासिंग करना है। मेरे संपादक में तरंग एंटी-एलाइज्ड है जबकि एबलेटन में कोई नहीं है (नीचे तुलना देखें)।
मैं एक तरह से CGMutablePathRef के लिए विरोधी aliasing बंद करने के लिए नहीं दिख रहा। क्या कोको की दुनिया में CGMutablePathRef के लिए एक गैर-एंटी-एलाइज्ड विकल्प है? यदि नहीं, तो क्या किसी को कुछ ओपनजीएल कक्षाओं या नमूना कोड के बारे में पता है जो मुझे मेरी विशाल रेखा को और अधिक कुशलता से आकर्षित करने के लिए निश्चित रूप से सेट कर सकता है?
अद्यतन 2014/01/21: अब है कि वास्तव में करता है एक महान पुस्तकालय मैं के लिए क्या देख रहा था: https://github.com/syedhali/EZAudio
विस्तृत प्रतिक्रिया के लिए धन्यवाद! लगता है जैसे आप यहां भी रहे हैं। दरअसल मैं तरंगों को अधिक बार खींच रहा हूं जितना मुझे चाहिए। मैं ओवरले के साथ एक पूर्ण पुनः ड्रॉ को प्रतिस्थापित करने पर विचार करूंगा। एस + एच मूल्यों का उपयोग करते हुए एबलेटन के बारे में, वे क्या हैं? आप यह मानने के लिए सही हैं कि मेरा कार्यान्वयन रैखिक इंटरपोलेशन का उपयोग करता है। ऐसा लगता है कि एबलेटन की स्क्वायर लाइनें आकर्षित करने के लिए और अधिक कुशल हो सकती हैं, लेकिन यह सुनिश्चित नहीं है कि मैं ऐसा करने के बारे में कैसे जाऊंगा। – tassock
@ टासॉक आपका स्वागत है। 'एस + एच' से, मेरा मतलब सिग्नल के 'नमूना और पकड़' मान था। यह केवल वेवफ़ॉर्म चरणों को खींचता है जैसा कि वे समय डोमेन में दर्शाए जाते हैं। सिग्नल के प्रतिनिधित्व को इंटरपोलेट और निर्माण करने के लिए यह बेहतर है (आईएमओ)। एस + एच ठीक है, लेकिन यह एक विकल्प होना चाहिए, एक इंटरपोलेटेड प्रतिनिधित्व डिफ़ॉल्ट के रूप में। जब मैं इंटरपोलेशन कहता हूं, तो मैं ऐसे दृष्टिकोण का जिक्र कर रहा हूं जो एस + एच या रैखिक इंटरपोलेशन की तुलना में एनालॉग सिग्नल का अधिक प्रतिनिधि है। इसके लिए, शायद यह आवश्यक है कि आप सटीकता के साथ प्रदर्शन को संतुलित करें। एक sinc अच्छा होगा, (cont) – justin
लेकिन आप शायद उच्च ऑर्डर स्पलीन (एक उदाहरण के रूप में) से दूर हो सकते हैं। वेवफॉर्म को इंटरपोलेटिंग/पुनर्निर्माण सही ढंग से आपके वर्तमान कार्यान्वयन में बहुत सी सीपीयू जोड़ सकता है। – justin