How to control hardware mic input gain/level on iPhone?

前端 未结 2 2010
没有蜡笔的小新
没有蜡笔的小新 2020-12-09 06:50

My audio-analysis function responds better on the iPad (2) than the iPhone (4). It seems sensitive to softer sounds on the iPad, whereas the iPhone requires much louder inpu

相关标签:
2条回答
  • 2020-12-09 06:56

    On ios6+ you can use AVAudioSession properties

            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");
            }               
    

    On ios5 you can get/set audio input gain properties using AudioSession functions

        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);
    

    (error handling omitted)

    As you are interested in controlling input gain, you may also want to disable automatic gain control by setting the audio session mode to AVAudioSessionModeMeasurement (ios5+6)

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

    These settings are fairly hardware-specific so availability cannot be assumed. For example, I can alter the gain on iPhone3GS/ios6 and iPhone4S/ios5.1, but not on ipadMini/ios6.1. I can disable AGC on the iPhone3G and the iPad mini, but not the iPhone4S.

    0 讨论(0)
  • 2020-12-09 07:14

    I think this can help you : http://www.stefanpopp.de/2011/capture-iphone-microphone/

    0 讨论(0)
提交回复
热议问题