2013-01-08 14 views
6

मैं आईओएस "ऑडियो कतार प्रोग्रामिंग गाइड - ऑडियो बजाना" का अनुसरण कर रहा हूं।ऑडियो कतार प्लेबैक कोड में CFRunLoopRunInMode() को क्यों कॉल करें?

do {            // 5 
    CFRunLoopRunInMode (       // 6 
     kCFRunLoopDefaultMode,      // 7 
     0.25,          // 8 
     false          // 9 
    ); 
} while (aqData.mIsRunning); 
//... 

लाइन 6 के बारे में दस्तावेज़ का कहना है:: गाइड के अंत के पास, वहाँ कदम Start and Run an Audio Queue में CFRunLoopRunInMode() के लिए कॉल कर रहे हैं "। CFRunLoopRunInMode समारोह रन पाश कि ऑडियो कतार के धागा होता है चलाता है" लेकिन क्या मेरी विधि वापस आने पर रन लूप को किसी भी तरह निष्पादित नहीं किया जाता है? उपरोक्त कोड को मेरे ऐप में प्ले बटन दबाकर मुख्य धागे द्वारा निष्पादित किया जाता है।

अब मुझे यह समझने में कठिनाई हो रही है कि CFRunLoopRunInMode() पर इन कॉलों के लिए क्या अच्छा है, क्योंकि उनके पास यह नुकसान है कि मेरा प्ले-बटन सही ढंग से अपडेट नहीं होता है (यह ऑडियो के पूरे समय के लिए दबाया जाता है) और कोई सकारात्मक प्रभाव नहीं है, यानी ऑडियो अच्छी तरह से खेलता है अगर मैं अपने कोड से डू-टाइम-लूप को CFRunLoopRunInMode() पर कॉल के साथ हटा देता हूं और इसके बजाय सीधे इस विधि से वापस आ जाता हूं। वैसे यह इन कॉल को हटाए जाने के स्पष्ट समाधान के लिए इंगित करता है क्योंकि इससे कोई समस्या नहीं आती है। क्या कोई यह बता सकता है कि ऑडियो प्लेबैक के लिए आईओएस में ऑडियो कतारों का उपयोग करने पर ऐप्पल द्वारा आधिकारिक मार्गदर्शिका में यह कोड क्यों शामिल किया गया है?

संपादित करें:

मैं सिर्फ दिखाई दे रही है मैक ओएस एक्स में, वहाँ iOS पर के रूप में ही ऑडियो कतारों एपीआई मौजूद है, और iOS के लिए गाइड Mac OS guide की एक कॉपी-पेस्ट दोहराव हो रहा है कि। इससे मुझे संदेह होता है कि रन लूप को कॉल करने वाले केवल मैक ओएस में आवश्यक हैं और अब आईओएस में नहीं हैं, उदा। क्योंकि अन्यथा मैक ओएस एप्लिकेशन बाहर निकल जाएगा या ऐसा कुछ होगा। क्या कोई इसे सत्यापित कर सकता है या इसे रद्द कर सकता है?

+2

मुझे लगता है कि आप सही हैं: मेरे लिए, यह एक स्टैंडअलोन (कमांड लाइन?) ऐप के लिए नमूना कोड जैसा दिखता है जो * कुछ और नहीं * लेकिन पूरा होने के लिए ऑडियो फ़ाइल चलाता है। "वास्तविक" ऐप में, रन लूप को "मैन्युअल रूप से चलाने" की आवश्यकता नहीं है। एफडब्ल्यूआईडब्ल्यू, मैं ऑडियोक्यूयू का उपयोग करता हूं और उस नमूना कोड को कभी नहीं देखा, और कभी भी इस तरह के लूप में 'CFRunLoopRunInMode() 'को कॉल नहीं करता। – bunnyhero

उत्तर

1

@bunnyhero सही है, CFRunLoopRunInMode() कमांड लाइन उदाहरण

https://github.com/abbood/Learning-Core-Audio-Book-Code-Sample/blob/master/CH05_Player/CH05_Player/main.c

जब तक के लिए आमतौर पर है अपने AudioQueueRef पुनः आवंटित की जाती नहीं है, आप न आईओएस में CFRunLoopRunInMode() उपयोग करने के लिए है ...

क्या मैं ऑडियो कतार के लिए एक अलग वर्ग बना रहा हूं और जब तक मेरी कक्षा सूचक और AudioQueueRef आवंटित किया गया है, मैं प्लेबैक, रोकें, फिर से शुरू कर सकता हूं, रोक सकता हूं ....

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