2013-08-06 17 views
16

मैं पॉडकास्ट ऐप पर काम कर रहा हूं। यह AVAudioSessionCategoryPlayback सत्र प्रकार का उपयोग कर ऑडियो चलाता है। यह लगभग हर चीज करता है जिसे मैं करना चाहता हूं। यह अन्य बजाने वाले संगीत को रोकता है, जब कॉल आती है तो यह बाधित हो जाता है और आम तौर पर ठीक वैसे ही काम करता है जैसा मैं चाहता हूं।पता लगाएं कि AVAudioSession "Ducked"

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

मैंने विभिन्न AVAudioSession गुणों जैसे AVAudioSessionCategoryOptionMixWithOthers को बदलने की कोशिश की है, लेकिन ये केवल मेरे आवेदन के साथ कम प्राथमिकता ध्वनियों को मिश्रित करते हैं। वे नहीं बदलते हैं कि कैसे उच्च प्राथमिकता ध्वनियों के साथ मिश्रित है। मैंने sharedSession की otherAudioPlaying संपत्ति को देखने का भी प्रयास किया, लेकिन जब मैं इन छोटी क्लिप को ओवरलेड करता हूं तो इससे बदलाव नहीं हुआ।

क्या यह पता लगाने का कोई तरीका है कि मेरे ऐप में ऑडियो डक किया जा रहा है ताकि मैं इसे रोक सकता हूं? या वैकल्पिक रूप से मेरे ऐप के ऑडियो को डकने से रोकने के लिए ताकि यह इन अन्य ध्वनियों को बाधाओं के रूप में पेश करे?

धन्यवाद।

+0

क्या आपने 'kAudioSessionBeginInterruption' और 'kAudioSessionEndInterruption' का उपयोग करने का प्रयास किया है? – iwasrobbed

+0

हां, लेकिन ओवरले डकिंग को AVAudioSession के संबंध में एक 'बाधा' के रूप में नहीं माना जाता है। तो इन कॉलबैक/अधिसूचनाओं को निकाल दिया नहीं गया है। –

+2

आप ऐप्पल के साथ एक रडार फाइल करना चाहेंगे, तो अगर आपको लगता है कि यह होना चाहिए। मेरी राय में, यह तार्किक लगता है कि इसे एक ऑडियो सत्र बाधा माना जाना चाहिए। – iwasrobbed

उत्तर

0

मैं इस कभी नहीं किया था, लेकिन मैं तुम्हें kAudioSessionProperty_OtherAudioIsPlaying के लिए अपने कॉलबैक रजिस्टर करने के लिए इस्तेमाल कर सकते हैं AudioSession सेवाओं सी समारोह audioSessionAddPropertyListener कल्पना।

ध्यान रखें कि "फ्लैटडाक्टेड" दस्तावेज और ऐप्पल देवफोरम्स में कुछ भ्रम है, कुछ या कुछ ऑडियो सत्र सी कार्यों को "भविष्य में" हटा दिया जा रहा है।

+0

आपके सुझाव के लिए धन्यवाद, मैं मदद की सराहना करता हूं। हालांकि, मैंने ओबीजे-सी और सी एपीआई दोनों की कोशिश की है। डकिंग के दौरान निकाल दिए जाने पर कॉलबैक के वांछित परिणाम न तो उत्पन्न हुए। –

0

आप रुकावट में देखना चाहते हो सकता है, और बस अपने ऑडियो सत्र त्यागने जब बाधित है, तो यह है, जब किसी रुकावट के समाप्त हो जाती है फिर से शुरू इस प्रकार है:

अपने viewDidLoad में:

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

if ([self canBecomeFirstResponder]) { 
    [self becomeFirstResponder]; 
} 

सूचनाएं संभाल :

static NSInteger audioSessionActiveCounter = 0; 

- (void)audioSessionDidChangeInterruptionType:(NSNotification *)notification 
{ 
    AVAudioSessionInterruptionType interruptionType = [[[notification userInfo] objectForKey:AVAudioSessionInterruptionTypeKey] unsignedIntegerValue]; 

    if (AVAudioSessionInterruptionTypeBegan == interruptionType) 
    { 
     DDLogVerbose(@"Session interrupted: --- Begin Interruption ---"); 
     // stop your session here with a setActive:NO 

    } 
    else if (AVAudioSessionInterruptionTypeEnded == interruptionType) 
    { 
     DDLogVerbose(@"Session interrupted: --- End Interruption ---"); 
     // resume your session here with a setActive:YES 
    } 
} 

उम्मीद है कि यह मदद करता है।

0

मुझे विश्वास नहीं है कि kAudioSessionProperty_OtherAudioIsPlaying किसी भी तरह से वापस कॉल करना है - ऐसा हो सकता है कि आपको नियमित रूप से इस मूल्य को मतदान करना होगा।

डिवाइस पर अन्य ऑडियो चलाए जाने पर इसे गैर-शून्य मान वापस करना चाहिए। यह इंगित नहीं कर सकता है कि आपको प्रति से "डुबकी" जा रही है लेकिन यह इंगित करेगी कि अन्य ऑडियो आपके ऑडियो के साथ मिश्रण कर रहा है। माना जाता है कि यदि आप अन्य ऐप को अपने ऑडियो सत्र की KAudioSessionProperty_OtherMixableAudioShouldDuck प्रॉपर्टी सेट करते हैं तो आपको केवल डक किया जाएगा।

मतदान के संबंध में - हाँ, यह कॉलबैक के रूप में सुरुचिपूर्ण नहीं हो सकता है, लेकिन कभी-कभी यह आवश्यक है और मुझे लगता है कि यह मान एक मामूली हिट है।

उम्मीद है कि इससे मदद मिलती है।

1

आप AppDelegate.m कक्षा में और didFinishLaunchingWithOptions समारोह में, निम्न सूचना

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(audioSessionInterruption:) name:AVAudioSessionInterruptionNotification object:nil]; 

और ऐप्लिकेशन को लॉन्च करने विधि बाहर सुनने के रूप में

- (void)audioSessionInterruption:(NSNotification *)notif{ 
    NSLog(@"\n\nInterruption Notification :%@\n\n",notif.userInfo); 
} 

आशा यह आपके लिए काम करेंगे चयनकर्ता लागू .. ..

0

मैंने इस मुद्दे के बारे में ऐप्पल डीटीएस को लिखा था। यहां मुझे वापस मिला है:

ऐप्पल डेवलपर तकनीकी सहायता (डीटीएस) से संपर्क करने के लिए धन्यवाद। हमारे इंजीनियरों ने आपके अनुरोध की समीक्षा की है और निष्कर्ष निकाला है कि वर्तमान में शिपिंग सिस्टम कॉन्फ़िगरेशन दिए गए वांछित कार्यक्षमता को प्राप्त करने के लिए कोई समर्थित तरीका नहीं है।

यदि आप एप्पल भविष्य में समर्थन जोड़ने की अनुमति के लिए/जब अग्रभूमि एप्लिकेशन बतख अन्य ऑडियो करने के लिए चुनता ऑडियो चला रहा रोकने के लिए पृष्ठभूमि ऐप्लिकेशन को सूचित करें, फिर फिर ऑडियो शुरू करने के लिए पृष्ठभूमि एप्लिकेशन सक्षम पर विचार करने के लिए चाहते हैं पूरा करने के बाद, कृपया बग रिपोर्टर टूल के माध्यम से http://bugreport.apple.com पर वृद्धि अनुरोध सबमिट करें।

लगता है कि दुर्भाग्यवश यह अभी असंभव है।

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