2014-07-21 10 views
6

में परिवर्तन नहीं करता है SO पर बहुत सारे प्रश्न और उत्तर हैं जो कहते हैं कि [AVAudioSession sharedInstance].outputVolume डिवाइस की मात्रा का पता लगाने का एकमात्र तरीका है। लेकिन ऐसा लगता है कि यह काफी सही काम नहीं करता है। outputVolume कभी भी नहीं बदलता है, हालांकि यह पहली बार सेट होने पर सही है (एप्लिकेशन लॉन्च पर)।AVAudioSession का आउटपुट वॉल्यूम कभी भी

क्या मैं इसे गलत कर रहा हूं? मुझे नहीं पता कि outputVolume के मूल्य को पढ़ने के अलावा और क्या करना है। मेरी सहजताएं मुझे बताएंगी कि यह एक बग था, अगर यह इस तथ्य के लिए नहीं था कि other people यह ठीक काम कर रहा है। मैंने आईओएस 7 और 8 पर भी इसका परीक्षण किया, इसलिए यह आईओएस 8 बग नहीं है। मैंने एक ही चीज को एक छोटी परीक्षा परियोजना में पुन: उत्पन्न किया, इसलिए मेरी परियोजना में कुछ भी इसके साथ हस्तक्षेप नहीं कर रहा है।

इसके अलावा: मैं रिंगर-वॉल्यूम और ध्वनि-मात्रा के बीच के अंतर के बारे में अच्छी तरह से अवगत हूं। मैंने दोनों को बदल दिया, और रिपोर्ट की गई मात्रा अभी भी नहीं बदली।

यहाँ समारोह मैं अपने परीक्षण परियोजना में इस्तेमाल बताया गया है:

- (void)checkVolume 
{ 
    float volume = [AVAudioSession sharedInstance].outputVolume; 

    NSLog(@"Volume: %f", volume); 

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(),^
    { 
     [self checkVolume]; 
    }); 
} 

उत्तर

18

उपयोग KVO, और सक्रिय करने के लिए sharedInstance सुनिश्चित करें:

[[AVAudioSession sharedInstance] setActive:YES error:nil]; 
[[AVAudioSession sharedInstance] addObserver:self forKeyPath:@"outputVolume" options:NSKeyValueObservingOptionNew context:nil]; 
+2

अच्छा। रहस्य लाइन में था [[[AVAudioSession साझाInstance] setActive: हाँ त्रुटि: शून्य]; '। 'OutputVolume' बदले जाने से पहले मुझे यही कहना है। बहुत बहुत धन्यवाद – Ahauehauehauhe

+1

मुझे यह पता लगाने से पहले मुझे बहुत सारे फर्जी एसओ उत्तरों देखना पड़ा। इसे बहुत अधिक रेट किया जाना चाहिए। –

+1

मुझे अभी भी एक समस्या है जहां आउटपुट पर केवीओ मेरा ऐप फोकस खोने के बाद काम करना बंद कर देता है (इसलिए मूल रूप से जब मेरा ऑडियो सत्र रीसेट हो जाता है), भले ही मैं पर्यवेक्षक को पुनः पंजीकृत कर दूं। – Ryan

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