2010-06-25 8 views
5

मैं ऐप्पल के ऑरियो टच डेमो के साथ खेल रहा हूं जो उनके ऑडियो यूनिट ट्यूटोरियल के लिए नमूना कोड है। यह एप्लिकेशन mic से एक साथ इनपुट/आउटपुट की अनुमति देता है। वक्ता के लिए। यह mic से इनपुट ध्वनि की एक स्टीरियोग्राफ भी प्रस्तुत करता है।आईओएस: ऑडियो यूनिट रिमोटियो ऑडियोबफर मैनिपुलेशन (यानी माइक्रोफोन से ध्वनि प्रभाव)

इस निम्न-स्तरीय प्रक्रिया के वास्तव में उच्च स्तर पर, नमूना कोड ऑडियोकंपोनेंट को परिभाषित करता है (इस मामले में रिमोटियो जो एक साथ इनपुट/आउटपुट की अनुमति देता है) और इस ऑडियो यूनिट के लिए एक रेंडर कॉलबैक है। कॉलबैक में वे कुछ ऑडियो फ़िल्टरिंग (एक डीसी अस्वीकृति फ़िल्टर) और माइक्रो से ऑडियोबफर ध्वनि डेटा के आधार पर स्टीरियोग्राफ के विज़ुअलाइज़ेशन करते हैं।

मेरा अंतिम लक्ष्य माइक से इनपुट पर आधारित अपनी कस्टम ध्वनि विरूपण ऑडियो यूनिट बनाना है। मुझे लगता है कि ऑडियो यूनिट ट्यूटोरियल के आधार पर ऐसा करने का उचित तरीका एक दूसरा ऑडियो यूनिट बनाना और उन्हें ऑडियो प्रोसेसिंग ग्राफ से कनेक्ट करना है। हालांकि, मैंने पढ़ा है कि आईओएस आपको अपनी खुद की कस्टम ऑडियो इकाइयों को पंजीकृत करने की अनुमति नहीं देता है। मेरे प्रश्न हैं:

  1. मुझे लगता है कि मैं remoteIO ऑडियो यूनिट के कॉलबैक प्रस्तुत करना में की पहुंच है (क्योंकि वे पहले से ही लग रहे हैं ऐसा करने और उस पर एक ऑडियो फ़िल्टर लागू किए जाने वाले) AudioBufferList पर सीधे प्रभाव और कर सकते हैं वहां अपना खुद का कस्टम ध्वनि विरूपण बनाओ?
  2. मैंने ऑडियोबफर सूची डेटा को निरंतर (एक मान जिसे मैंने इसे नमूना चलाने और ऑडियोबफर सूची के लॉगिंग से देखा है) को असाइन करने का प्रयास किया है, लेकिन ऐसा कुछ नहीं लगता है।

उत्तर

4

आपके पहले प्रश्न का उत्तर हाँ है। आमतौर पर यह कैसे किया जाता है।

मुझे विश्वास है कि आपको पुन: असाइन करने के बजाय सीधे सूचक में डेटा को कुशलतापूर्वक उपयोग करने की आवश्यकता है। आप ओपनफ्रेमवर्क में कोड को देखना चाहते हैं जो बफर को असाइन करते हैं और उन्हें कॉलबैक में पास करते हैं: https://github.com/openframeworks/openFrameworks/blob/master/addons/ofxiPhone/src/sound/ofxiPhoneSoundStream.mm

वहां कोई अन्य कोड है जिसे आप देख सकते हैं, निक कॉलिन्स के पास ध्वनि बंद करने के लिए मूलभूत एप्लिकेशन है माइक्रोफोन और स्पीकर के बाहर, whist के बीच में प्रसंस्करण: http://www.cogs.susx.ac.uk/users/nc81/code.html। उनके पास कोड भी है जो आईपॉड ट्रैक से नमूना बफर प्राप्त करता है जो आपके लिए उपयोगी हो सकता है।

+1

कोई भी जिथब लिंक की तलाश में है, वह कोड अब स्थानांतरित हो गया है: https://github.com/openframeworks/openFrameworks/blob/master/addons/ofxiPhone/src/sound/ofxiPhoneSoundStream.mm –

1

यह सच है कि आप आईफोन में अपने स्वयं के कस्टम ऑडियो यूट्स नहीं जोड़ सकते हैं।

जिस तरह से यह इस तरह काम करता है: स्पीकर सिस्टम के माध्यम से डेटा की पुल-चेन चलाता है। आप ioUnit को रेंडर कॉलबैक जोड़ते हैं, जैसा कि आपने पहले से ही किया है।

स्पीकर (बस # 0) भूख लगी है जब कॉलबैक चलता है और स्पीकर द्वारा दिए गए बफर में, जैसा कि अनुरोध किया गया है, उतने नमूने भरने का आपका काम है। प्रदत्त बफर का आकार दो की शक्ति होगी जो आपके द्वारा निर्दिष्ट प्राथमिक आईओ बफर अवधि के लिए जितना संभव हो उतना करीब होगा, जिसे आपने ऑडियो सत्र को कॉन्फ़िगर करते समय निर्दिष्ट किया था।

ऐसा करने का सबसे आसान तरीका है ऑडियोबफर सूची जिसे आप दिए गए थे और इसे माइक्रोफोन (बस # 1) पर ऑडियो यूनीटेंडर को पास करना है। रेंडर() के साथ बफर भरने के बाद, लेकिन कॉलबैक रिटर्न से पहले, आप जिस तरह से चाहें डेटा को कुशल बना सकते हैं। उदाहरण के लिए, AurioTouch इसे म्यूट करने के लिए इसे शून्य बनाता है।

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

यदि आप केवल ioData बफर में काम करने के लिए बाध्य नहीं होना चाहते हैं, तो आप किसी भी आकार में अपनी पसंद के किसी भी तरीके से आवंटित अपनी ऑडियोबफर सूची का उपयोग कर सकते हैं और माइक्रोफ़ोन को उसमें रेंडर() से पूछ सकते हैं। फिर आप अंत में सभी मैनिपुलेशन कर सकते हैं जैसे अंत में आप परिणाम को कॉलबैक द्वारा प्रदान किए गए बफर में कॉपी करते हैं (यानी ioData-> mBuffers [0] .mData जैसा कि कॉलबैक लागू किया गया था)।

संबंधित मुद्दे