如何控制iPhone上的硬件麦克风input增益/电平?

我的audio分析function在iPad(2)上反应比iPhone(4)好。 它似乎对iPad上柔和的声音很敏感,而iPhone需要更响亮的input才能正确响应。 无论是因为麦克风放置,不同的组件,不同的软件configuration还是其他因素,我希望能够在我的应用程序中进行控制。

显然,我可以乘以我所有的audio样本,以编程方式应用增益。 当然这也有软件成本,所以:

是否有可能通过iOS软件控制麦克风的增益,类似于MacOS中的增益? 我找不到任何文件,但我希望我只是想念它。

在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函数获取/设置audioinput增益属性

  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)

正如您对控制input增益感兴趣的那样,您可能还希望通过将audio会话模式设置为AVAudioSessionModeMeasurement (ios5 + 6)来禁用自动增益控制。

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

这些设置相当硬件特定,所以不能假定可用性。 例如,我可以改变iPhone3GS / ios6和iPhone4S / ios5.1的增益,但不能改变ipadMini / ios6.1。 我可以在iPhone3G和iPad mini上禁用AGC,但不能在iPhone4S上使用。

我认为这可以帮助你: http : //www.stefanpopp.de/2011/capture-iphone-microphone/