我的音频分析功能在 iPad (2) 上的响应比 iPhone (4) 好。它似乎对 iPad 上较柔和的声音很敏感,而 iPhone 需要更大声的输入才能正确响应。无论这是因为麦克风放置、不同的组件、不同的软件配置还是其他一些因素,我都希望能够在我的应用程序中对其进行控制。
显然,我可以将所有音频样本相乘,以编程方式应用增益。当然,这也有软件成本,所以:
是否可以像在 MacOS 中一样从 iOS 软件中控制麦克风的增益?我找不到任何关于此的文档,但我希望我只是以某种方式错过了它。
我的音频分析功能在 iPad (2) 上的响应比 iPhone (4) 好。它似乎对 iPad 上较柔和的声音很敏感,而 iPhone 需要更大声的输入才能正确响应。无论这是因为麦克风放置、不同的组件、不同的软件配置还是其他一些因素,我都希望能够在我的应用程序中对其进行控制。
显然,我可以将所有音频样本相乘,以编程方式应用增益。当然,这也有软件成本,所以:
是否可以像在 MacOS 中一样从 iOS 软件中控制麦克风的增益?我找不到任何关于此的文档,但我希望我只是以某种方式错过了它。
在 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 上改变。我可以在 iPhone3G 和 iPad mini 上禁用 AGC,但不能在 iPhone4S 上禁用。
我认为这可以帮助你: http: //www.stefanpopp.de/2011/capture-iphone-microphone/