2012-06-18 10 views
6

मैं पृष्ठभूमि में खेलने के लिए अपना ऑडियो ऐप प्राप्त करने का प्रयास कर रहा हूं। अब तक मैं जोड़ा Info.plist में "आवश्यक पृष्ठभूमि मोड" और भी निम्न कोड को "ऐप्स को ऑडियो निभाता है" बस अपना ध्वनि जनरेटर शुरू करने से पहले:स्क्रीन लॉक होने पर आईओएस पृष्ठभूमि ऑडियो बंद हो जाता है

AudioSessionInitialize(NULL, kCFRunLoopDefaultMode, &interruptionListener, sgD); 
AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, &routeChangeListener, sgD); 

// select "Playback" audio session category 
NSError *setCategoryError = nil; 
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &setCategoryError]; 

OSStatus propertySetError = 0; 
UInt32 category = kAudioSessionCategory_MediaPlayback; 
propertySetError = AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, sizeof (category), &category); 

AudioSessionSetActive(true); 

हालांकि, यह केवल काम करता है जब मैं एक ऐप्लिकेशन पर स्विच या आइपॉड की मुख्य स्क्रीन पर। जब मैं स्क्रीन बंद करता हूं, तो यह मेरे ऑडियो आउटपुट को भी बंद कर देता है, जो निश्चित रूप से मैं नहीं चाहता हूं। हालांकि, सभी ट्यूटोरियल/प्रलेखन/स्टैक ओवरफ्लो पर सवालों के जवाब यह इंगित करते हैं कि स्क्रीन बंद होने पर ऑडियो चलाना स्वचालित रूप से आता है जब आप पृष्ठभूमि ऑडियो को काम पर लेते हैं। क्या किसी के पास मेरे लिए संकेत है? आपका अग्रिम रूप से बोहोत धन्यवाद! फ्रिट्ज

+0

मैं क्या कह करना भूल गया: मैं ऑडियो आउटपुट स्ट्रीम उत्पन्न करने के लिए ऑडियोक्यूयू का उपयोग कर रहा हूं। स्क्रीन बंद होने पर ऑडियो कतार कॉलबैक को कॉल किया जाता है, लेकिन हेडफ़ोन पर ध्वनि नहीं सुनाई देती है। यह कुछ ऑडियो रूट समस्या का संकेत हो सकता है। हालांकि, मेरे मार्ग परिवर्तन कॉलबैक कभी नहीं कहा जाता है। –

+4

ठीक है, समस्या हल हो गई है ... यह पता चला है कि स्क्रीन बफर आकार को स्क्रीन बंद होने पर चलाने के लिए पर्याप्त होना चाहिए। मुझे नहीं पता कि यह सभी ऐप्स पर लागू होता है, लेकिन मेरे ऐप को कम से कम 2048 नमूने के बफर आकार की आवश्यकता होती है। 1024 नमूने के साथ यह अभी काम करना बंद कर दिया। –

+3

यदि आप इसे काम करने में सक्षम थे, तो क्या आप अपना समाधान उत्तर के रूप में जोड़ सकते हैं? धन्यवाद। –

उत्तर

5

यह लेख समस्या बताते हैं:

Technical Q&A QA1606 Audio Unit Processing Graph - Ensuring audio playback continues when screen is locked

असल में, तुम सिर्फ 4096 स्लाइस समर्थन करने के लिए सुनिश्चित करें कि आप सभी AudioUnits सेट करने की जरूरत है:

// set the mixer unit to handle 4096 samples per slice since we want to keep rendering during screen lock 
UInt32 maxFPS = 4096; 
AudioUnitSetProperty(
    mMixer, 
    kAudioUnitProperty_MaximumFramesPerSlice, 
    kAudioUnitScope_Global, 
    0, 
    &maxFPS, 
    sizeof(maxFPS)); 
+0

AVAudioEngine पर इसे लागू करने का कोई विचार है? – DrMickeyLauer

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