El método AVAudioRecorder Record devuelve NO random.

Actualmente estoy desarrollando una aplicación que admite la grabación de audio en la aplicación. El usuario puede get una vista de tabla estándar de los files de audio guardados localmente que ya ha grabado a través de la aplicación, o presionar un button para ir a una nueva vista de grabación, desde donde es posible grabar una nueva session de audio, que obtendrá automáticamente guardado en el entorno limitado de aplicaciones. Ahora esta function funciona bien la mayor parte del time. Puedo grabar nuevos files y reproducirlos desde la aplicación, pero random la grabadora de audio no podrá iniciar una grabación en este método:

-(void) startRecording { if (!isRecording) { isRecording = YES; BOOL recordingSucess = [audioRecorder record]; if (recordingSucess) NSLog(@"WE STARTED THE RECORDING!"); else NSLog(@"WE DID NOT START THE RECORDING!"); // Start the timer recordTiming = [NSDate date]; timeCheck = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(timeCheck) userInfo:nil repeats:YES] } 

Es decir, el NSLog imprimirá "No comenzamos la grabación", lo que indica que no pudo iniciar la grabación. Esto da como resultado que se guarde un file de audio vacío en la aplicación con un tamaño de file constante de exactamente 4096 bytes. Así se inicializa el object de la grabadora de audio:

 -(id) initWithContentURL:(NSURL *)contentURL { self = [super init]; if (self) { NSLog(@"Initializing audio recorder!"); // Specific settings for the audio recording NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:AVAudioQualityMin], AVEncoderAudioQualityKey, [NSNumber numberWithInt:8], AVEncoderBitRateKey, [NSNumber numberWithInt: 2], AVNumberOfChannelsKey, [NSNumber numberWithFloat:22000.0], AVSampleRateKey, nil]; NSError *error = nil; audioRecorder = [[AVAudioRecorder alloc] initWithURL:contentURL settings:recordSettings error:&error]; audioRecorder.delegate = self; } 

También hay comprobaciones NSLog que comtestingn si el error es nulo o no, por lo que en este momento estoy seguro de que la initialization no parece fallar. ¿Qué podría hacer exactamente que el método de logging falle en times aparentemente aleatorios, mientras que funciona perfectamente bien en la mayoría de los demás momentos?

Antes de iniciar la grabación, se debe inicializar una session de audio:

 AVAudioSession *audioSession = [AVAudioSession shanetworkingInstance]; NSError *err = nil; [audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err]; if(err){ NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]); return; } err = nil; [audioSession setActive:YES error:&err]; if(err){ NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]); return; } 

Consulte la respuesta aceptada como reference.

¿ContentURL es siempre el mismo o genera uno nuevo cada vez?

¿También podría intentar explícitamente llamar a prepareToRecord antes de grabar y comprobar si tiene éxito o no?