2012-06-03 10 views
8

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

स्पष्ट रूप से मैं अपने सभी ऑडियो नमूने को प्रोग्रामेटिक रूप से लाभ लागू करने के लिए गुणा कर सकता हूं। बेशक इसमें एक सॉफ्टवेयर लागत भी है, इसलिए:

क्या आईओएस में सॉफ़्टवेयर से माइक के लाभ को नियंत्रित करना संभव है, इसी तरह मैकोज़ में यह कैसा है? मुझे इस पर कोई दस्तावेज नहीं मिल रहा है, लेकिन मुझे आशा है कि मैं इसे किसी भी तरह याद कर रहा हूं।

उत्तर

17

iOS6 पर + आप AVAudioSession गुण

 CGFloat gain = sender.value; 
     NSError* error; 
     self.audioSession = [AVAudioSession sharedInstance]; 
     if (self.audioSession.isInputGainSettable) { 
      BOOL success = [self.audioSession setInputGain:gain 
                error:&error]; 
       if (!success){} //error handling 
     } else { 
      NSLog(@"ios6 - cannot set input gain"); 
     }    

iOS5 आप प्राप्त कर सकते हैं पर उपयोग कर सकते हैं/AudioSession कार्यों का उपयोग कर ऑडियो इनपुट लाभ गुण सेट

UInt32 ui32propSize = sizeof(UInt32); 
    UInt32 f32propSize = sizeof(Float32); 
    UInt32 inputGainAvailable = 0; 
    Float32 inputGain = sender.value; 


    OSStatus err = 
     AudioSessionGetProperty(kAudioSessionProperty_InputGainAvailable 
          , &ui32propSize 
          , &inputGainAvailable); 

    if (inputGainAvailable) { 
    OSStatus err = 
     AudioSessionSetProperty(kAudioSessionProperty_InputGainScalar 
          , sizeof(inputGain) 
          , &inputGain); 
    } else { 
     NSLog(@"ios5 - cannot set input gain"); 
    } 
    OSStatus err = 
     AudioSessionGetProperty(kAudioSessionProperty_InputGainScalar 
           , &f32propSize 
           , &inputGain); 
    NSLog(@"inputGain: %0.2f",inputGain); 

(छोड़े गए त्रुटि प्रबंधन)

आप इनपुट लाभ को नियंत्रित करने में रुचि रखते हैं के रूप में, आप भी AVAudioSessionModeMeasurement (iOS5 + 6) करने के लिए ऑडियो सत्र मोड सेट करके स्वत: लाभ नियंत्रण अक्षम कर सकते हैं

[self.audioSession setMode:AVAudioSessionModeMeasurement 
        error:nil]; 
NSLog(@"mode:%@",self.audioSession.mode); 

ये सेटिंग्स काफी हार्डवेयर-विशिष्ट हैं, इसलिए उपलब्धता नहीं किया जा सकता ग्रहण किया। उदाहरण के लिए, मैं iPhone3GS/ios6 और iPhone4S/ios5.1 पर लाभ को बदल सकता हूं, लेकिन ipadMini/ios6.1 पर नहीं। मैं आईफोन 3 जी और आईपैड मिनी पर एजीसी अक्षम कर सकता हूं, लेकिन आईफोन 4 एस नहीं।

+0

समाधान के लिए धन्यवाद - क्या आपको पता है कि कोड में मुझे यह कहां सेट करना चाहिए? क्या यह वैश्विक माइक्रोफोन लाभ स्तर या केवल एक विशिष्ट रिकॉर्डिंग स्ट्रीम के लिए नियंत्रित करता है? –

+2

@ डेविडडौडेलिन - यह आपके ऐप के लिए माइक गेन लेवल सेट करता है, और सेटिंग्स तब तक आपके ऐप के पूरे रनटाइम के लिए होती रहती हैं जब तक कि आप उन्हें बदल नहीं देते। उन्हें सेट करने के लिए उपयुक्त स्थान ऐप प्रतिनिधि या नियंत्रक की 'init' विधि होगी। मैं आमतौर पर एक ऑडियो कंट्रोलर ऑब्जेक्ट करता हूं और वहां ऑडियो सत्र स्थापित करता हूं। जब आपका ऐप पृष्ठभूमि होता है तो व्यवहार आपकी सेटिंग्स और अन्य ऐप्स के उन पर निर्भर करता है जो हार्डवेयर नियंत्रण के लिए प्रतिस्पर्धा कर सकते हैं। – foundry

+0

बहुत बहुत धन्यवाद! –

-2

मुझे लगता है कि यह आपकी मदद कर सकते हैं: http://www.stefanpopp.de/2011/capture-iphone-microphone/

+0

अच्छा लेख, लेकिन यह केवल ऑडियो स्ट्रीम के सॉफ़्टवेयर हेरफेर का वर्णन करता है, जैसा कि मैंने उल्लेख किया है कि मैं पहले से ही कर रहा हूं। – buildsucceeded

+1

केवल लिंक ही लिंक विशेष रूप से सहायक नहीं हैं, और लिंक में मरने की प्रवृत्ति है, जो उत्तर को पूरी तरह बेकार प्रदान करता है। – nhgrif

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