2012-09-15 14 views
12

Estoy implementando la grabación de audio. Funciona bien con el formato caf & wave. Pero el problema es que el tamaño del archivo es demasiado grande.iOS: Formato de archivo de grabación de audio

Entonces, ¿alguien me puede ayudar a grabar audio con formato que también se reproduce en la ventana & el tamaño del archivo es poco bajo.

El código que he intentado es a continuación:

dirPaths = NSSearchPathForDirectoriesInDomains(
                NSDocumentDirectory, NSUserDomainMask, YES); 
    docsDir = [dirPaths objectAtIndex:0]; 
    NSString *soundFilePath = [docsDir 
           stringByAppendingPathComponent:@"sound.wave"]; 
    NSLog(@"%@",soundFilePath); 
    NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath]; 

    NSDictionary *recordSettings = [NSDictionary 
         dictionaryWithObjectsAndKeys: 
            [NSNumber numberWithInt:AVAudioQualityMin], 
            AVEncoderAudioQualityKey, 
            [NSNumber numberWithInt:16], 
            AVEncoderBitRateKey, 
            [NSNumber numberWithInt: 2], 
            AVNumberOfChannelsKey, 
            [NSNumber numberWithFloat:8000.0], AVSampleRateKey, 
            [NSNumber numberWithInt:8], AVLinearPCMBitDepthKey, 
            nil]; 

    NSError *error = nil; 

    audioRecorder = [[AVAudioRecorder alloc] 
         initWithURL:soundFileURL 
         settings:recordSettings 
         error:&error]; 

    if (error) 
    { 
     NSLog(@"error: %@", [error localizedDescription]); 

    } else { 
     [audioRecorder prepareToRecord]; 
    } 
+0

duplicado de http://stackoverflow.com/questions/4279311/how-to-record-voice-in-m4a-format? – nneonneo

+0

Grabe en formato m4a (MPEG-4 AAC). Consulte http://stackoverflow.com/questions/4279311/how-to-record-voice-in-m4a-format para obtener más detalles. – nneonneo

Respuesta

16

también estaba tratando de utilizar AVAudioRecorder para grabar audio en un formato codificado AAC preferentemente en un archivo .m4a. Rápidamente pude obtener el código para grabar en AAC dentro de un archivo de audio central (.caf), pero no pude hacer que AVAudioRecorder formatee correctamente un .m4a. Estaba a punto de reescribir el código de grabación en mi aplicación utilizando la API de Unidades de audio de nivel inferior, pero en su lugar lo puse en el segundo plano y lo agregué al código para manejar la sesión de audio compartida. Una vez que se configuró, volví e intenté guardar como .m4a y simplemente funcionó.

Aquí es un código de ejemplo:

NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *docsDir = [dirPaths objectAtIndex:0]; 
NSURL *tmpFileUrl = [NSURL fileURLWithPath:[docsDir stringByAppendingPathComponent:@"tmp.m4a"]]; 
NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys: 
         [NSNumber numberWithInt: kAudioFormatMPEG4AAC], AVFormatIDKey, 
         [NSNumber numberWithFloat:16000.0], AVSampleRateKey, 
         [NSNumber numberWithInt: 1], AVNumberOfChannelsKey, 
         nil]; 
NSError *error = nil; 
AVAudioRecorder *recorder = [[AVAudioRecorder alloc] initWithURL:tmpFileUrl settings:recordSettings error:&error]; 
[recorder prepareToRecord]; 

AVAudioSession *session = [AVAudioSession sharedInstance]; 
[session setCategory:AVAudioSessionCategoryRecord error:nil]; 
[session setActive:YES error:nil]; 

[recorder record]; 

Luego de finalizar la grabación utilicé:

[recorder stop]; 
AVAudioSession *session = [AVAudioSession sharedInstance]; 
int flags = AVAudioSessionSetActiveFlags_NotifyOthersOnDeactivation; 
[session setActive:NO withFlags:flags error:nil]; 

A continuación, el archivo en 'tmpFileUrl' se puede utilizar a su gusto.

+0

'setActive: withFlags: error:' está en desuso después de iOS 6. En su lugar, podemos usar 'setActive: error:' (sin marcar flags). Funciona bien para mí. – Vineeth

+0

¡Amigo! Me salvó el día :) Estoy haciendo una aplicación para mi bebé para su primer cumpleaños, así que te lo agradezco <3 –

+0

Cambiando de kAudioFormatMPEG4AAC a kAudioFormatMPEG4AAC, cambia el tamaño de archivo de 1.3MB a 45kb – Thiru

1
NSMutableDictionary *settings = [[NSMutableDictionary alloc] initWithCapacity:0]; 

[settings setValue :[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey]; 
[settings setValue:[NSNumber numberWithFloat:8000.0] forKey:AVSampleRateKey]; 
[settings setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey]; 
[settings setValue :[NSNumber numberWithInt:8] forKey:AVLinearPCMBitDepthKey]; 
[settings setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey]; 
[settings setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey]; 

//Encoder 

[settings setValue :[NSNumber numberWithInt:12000] forKey:AVEncoderBitRateKey]; 
[settings setValue :[NSNumber numberWithInt:8] forKey:AVEncoderBitDepthHintKey]; 
[settings setValue :[NSNumber numberWithInt:8] forKey:AVEncoderBitRatePerChannelKey]; 
[settings setValue :AVAudioQualityMin   forKey:AVEncoderAudioQualityKey]; 
6

Éstos son mis ajustes de alta calidad y tamaño de archivo pequeño (en el equilibrio):

NSDictionary *recordSettings = @{AVEncoderAudioQualityKey: @(AVAudioQualityMedium), 
           AVFormatIDKey: @(kAudioFormatMPEG4AAC), 
           AVEncoderBitRateKey: @(128000), 
           AVNumberOfChannelsKey: @(1), 
           AVSampleRateKey: @(44100)}; 

Esto le da una pista mono cerca de AAC calidad de CD. Debe agregar el archivo con .m4a para que sea legible en todas partes. Todos los demás parámetros se configuran en los valores predeterminados del dispositivo, que es lo que desea que suceda en la mayoría de los casos.

+0

De nuevo, esto solía funcionar bien, pero ahora está distorsionado con iOS10 si hay un nivel apreciable. Usando iPad Pro –

Cuestiones relacionadas