Su iOS6 + è possibile utilizzare le proprietà 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");
}
Su iOS5 è possibile ottenere/set audio proprietà di guadagno in ingresso utilizzando le funzioni 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);
(gestione degli errori omessa)
Come siete interessati a controllare guadagno in ingresso, si consiglia inoltre di disattivare il controllo automatico del guadagno impostando la modalità sessione audio di AVAudioSessionModeMeasurement
(iOS5 + 6)
[self.audioSession setMode:AVAudioSessionModeMeasurement
error:nil];
NSLog(@"mode:%@",self.audioSession.mode);
Queste impostazioni sono abbastanza specifiche hardware in modo disponibilità non può essere assunto. Ad esempio, posso modificare il guadagno su iPhone3GS/ios6 e iPhone4S/ios5.1, ma non su ipadMini/ios6.1. Posso disabilitare AGC su iPhone3G e iPad mini, ma non su iPhone4S.
Grazie per la soluzione - sapete dove nel codice dovrei impostare questo? Controlla i livelli di guadagno del microfono globale o solo per un flusso di registrazione specifico? –
@DavidDaudelin: imposta i livelli di guadagno del microfono per la tua app e le impostazioni rimangono attive per l'intero runtime della tua app fino a quando non le cambierai. Luoghi adatti per impostarli sono il delegato dell'app o il metodo 'init' di un controller. Solitamente realizzo un oggetto audioController e installo la sessione audio lì. Il comportamento quando la tua app è in background dipende dalle tue impostazioni e da quelle di altre app che potrebbero competere per il controllo hardware. – foundry
Grazie mille! –