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 ではできません。