Mi aplicación de iPhone usa "AVAudioRecorder" para hacer grabaciones de voz. También usa "UIImagePickerController" para grabar películas y "MPMoviePlayerController" para reproducir películas.AVAudioRecorder no grabará SI la película fue grabada y reproducida previamente
Todo funciona bien hasta que lo haga las tres cosas consecutivas:
- grabar una película usando UIImagePickerController
- Reproduzca la película grabada usando MPMoviePlayerController
- tratar de hacer una grabación de voz usando AVAudioRecorder
Cuando llamo al método "grabar" de AVAudioRecorder en el paso 3, devuelve NO indicando el error, pero sin dar pistas de por qué (vaya a Appl e!) El método de delegado audioRecorderEncodeErrorDidOccur de AVAudioRecorder nunca se llama y no recibo ningún otro error al configurar la grabadora.
Mi primera suposición fue que la grabación/reproducción de películas estaba modificando la instancia compartida de "AVAudioSession" de tal forma que impedía que la grabadora de audio funcionara. Sin embargo, estoy configurando manualmente la propiedad de categoría de AVAudioSession en "AVAudioSessionCategoryRecord" y activo la sesión de audio antes de intentar grabar.
Aquí es mi método para crear la grabadora:
- (void)createAudioRecorder
{
NSError *error = nil;
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryRecord error:&error];
if (error)
...
[audioSession setActive:YES error:&error];
if (error)
...
NSMutableDictionary *settings = [[NSMutableDictionary alloc] init];
// General Audio Format Settings
[settings setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];
[settings setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey];
[settings setValue:[NSNumber numberWithInt:1] forKey:AVNumberOfChannelsKey];
// Encoder Settings
[settings setValue:[NSNumber numberWithInt:AVAudioQualityMin] forKey:AVEncoderAudioQualityKey];
[settings setValue:[NSNumber numberWithInt:96] forKey:AVEncoderBitRateKey];
[settings setValue:[NSNumber numberWithInt:16] forKey:AVEncoderBitDepthHintKey];
// Write the audio to a temporary file
NSURL *tempURL = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:@"Recording.m4a"]];
audioRecorder = [[AVAudioRecorder alloc] initWithURL:tempURL settings:settings error:&error];
if (error)
...
audioRecorder.delegate = self;
if ([audioRecorder prepareToRecord] == NO)
NSLog(@"Recorder fails to prepare!");
[settings release];
}
y aquí está mi método para iniciar la grabación:
- (void)startRecording
{
if (!audioRecorder)
[self createAudioRecorder];
NSError *error = nil;
[[AVAudioSession sharedInstance] setActive:YES error:&error];
if (error)
...
BOOL recording = [audioRecorder record];
if (!recording)
NSLog(@"Recording won't start!");
}
Cualquier persona ha funcionado en este problema antes?
¡Gracias, estaba teniendo el mismo problema y no podía entender lo que estaba mal por mucho tiempo! –
Gracias, ayudó. –