Actualmente estoy desarrollando una aplicación que admite la grabación de audio en la aplicación. El usuario puede obtener una vista de tabla estándar de los archivos de audio guardados localmente que ya ha grabado a través de la aplicación, o presionar un botón para ir a una nueva vista de grabación, desde donde es posible grabar una nueva sesión de audio, que automáticamente obtendrá guardado en la zona de pruebas de la aplicación. Ahora esta función funciona bien la mayor parte del tiempo. Puedo grabar nuevos archivos y reproducirlos desde la aplicación, pero a veces al azar el grabador de audio no se podrá iniciar una grabación en este método:AVAudioRecorder El método de registro devuelve NO en momentos aleatorios
-(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 empezamos la grabación ", lo que indica que no pudo iniciar la grabación. Esto da como resultado que un archivo de audio vacío se esté guardando en la aplicación con un tamaño de archivo constante de exactamente 4096 bytes. Esto es cómo se inicializa el objeto grabador 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 controles NSLog que comprueba si el error es nulo o no, por lo que en este punto estoy seguro de que la inicialización no parece fallar. ¿Qué podría hacer exactamente que el método de grabación falle en tiempos aparentemente aleatorios, mientras que funciona perfectamente bien en la mayoría de los casos?
Voy a intentar esto y volver. Solo necesito probarlo el tiempo suficiente para asegurarme de que el error desaparezca – Luffen
¡Esto funcionó, gracias! :) – Luffen
@Luffen Me alegra que ayude. En cuanto al 4096, supongo que es una parte del encabezado de un archivo multimedia que se ha escrito en el disco como preparación, pero la grabación falló y la parte de datos del archivo no se llenó. –