Как контролировать аппаратное усиление/уровень микрофона на iPhone?
моя функция аудио-анализа лучше реагирует на iPad (2), чем на iPhone (4). Он кажется чувствительным к более мягким звукам на iPad, в то время как iPhone требует гораздо более громкого ввода для правильной реакции. Будь то из-за размещения микрофона, различных компонентов, различных конфигураций программного обеспечения или какого-то другого фактора, я хотел бы иметь возможность контролировать его в своем приложении.
очевидно, я мог бы просто умножить все мои звуковые образцы, чтобы программно применить усиление. Конечно, что имеет стоимость программного обеспечения тоже, так что:
можно ли контролировать усиление микрофона от программного обеспечения в iOS, аналогично тому, как это происходит в MacOS? Я не могу найти никакой документации по этому поводу, но я надеюсь, что я просто пропустил его как-то.
2 ответов
на 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. Я могу отключить AGC на iPhone3G и iPad mini, но не iPhone4S.
Я думаю, это может вам помочь:http://www.stefanpopp.de/2011/capture-iphone-microphone/