En realidad, no hay ejemplos en absoluto. Aquí está mi código de trabajo. La grabación se activa cuando el usuario presiona un botón en la barra de navegación. La grabación utiliza calidad cd (44100 muestras), estéreo (2 canales) lineal pcm. Tenga cuidado: si desea usar un formato diferente, especialmente uno codificado, asegúrese de comprender completamente cómo configurar los ajustes de AVAudioRecorder (lea cuidadosamente la documentación de los tipos de audio), de lo contrario, nunca podrá inicializarlo correctamente. Una cosa más. En el código, no estoy mostrando cómo manejar los datos de medición, pero puedes resolverlo fácilmente. Finalmente, tenga en cuenta que el método AVAudioRecorder deleteRecording a partir de este escrito bloquea su aplicación. Es por eso que estoy eliminando el archivo grabado a través del Administrador de archivos. Cuando finalizo la grabación, guardo el audio grabado como NSData en el objeto actualmente editado usando KVC.
#define DOCUMENTS_FOLDER [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]
- (void) startRecording{
UIBarButtonItem *stopButton = [[UIBarButtonItem alloc] initWithTitle:@"Stop" style:UIBarButtonItemStyleBordered target:self action:@selector(stopRecording)];
self.navigationItem.rightBarButtonItem = stopButton;
[stopButton release];
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *err = nil;
[audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err];
if(err){
NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
return;
}
[audioSession setActive:YES error:&err];
err = nil;
if(err){
NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
return;
}
recordSetting = [[NSMutableDictionary alloc] init];
[recordSetting setValue :[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];
[recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey];
[recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey];
[recordSetting setValue :[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];
[recordSetting setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey];
[recordSetting setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey];
// Create a new dated file
NSDate *now = [NSDate dateWithTimeIntervalSinceNow:0];
NSString *caldate = [now description];
recorderFilePath = [[NSString stringWithFormat:@"%@/%@.caf", DOCUMENTS_FOLDER, caldate] retain];
NSURL *url = [NSURL fileURLWithPath:recorderFilePath];
err = nil;
recorder = [[ AVAudioRecorder alloc] initWithURL:url settings:recordSetting error:&err];
if(!recorder){
NSLog(@"recorder: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
UIAlertView *alert =
[[UIAlertView alloc] initWithTitle: @"Warning"
message: [err localizedDescription]
delegate: nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];
return;
}
//prepare to record
[recorder setDelegate:self];
[recorder prepareToRecord];
recorder.meteringEnabled = YES;
BOOL audioHWAvailable = audioSession.inputIsAvailable;
if (! audioHWAvailable) {
UIAlertView *cantRecordAlert =
[[UIAlertView alloc] initWithTitle: @"Warning"
message: @"Audio input hardware not available"
delegate: nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[cantRecordAlert show];
[cantRecordAlert release];
return;
}
// start recording
[recorder recordForDuration:(NSTimeInterval) 10];
}
- (void) stopRecording{
[recorder stop];
NSURL *url = [NSURL fileURLWithPath: recorderFilePath];
NSError *err = nil;
NSData *audioData = [NSData dataWithContentsOfFile:[url path] options: 0 error:&err];
if(!audioData)
NSLog(@"audio data: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
[editedObject setValue:[NSData dataWithContentsOfURL:url] forKey:editedFieldKey];
//[recorder deleteRecording];
NSFileManager *fm = [NSFileManager defaultManager];
err = nil;
[fm removeItemAtPath:[url path] error:&err];
if(err)
NSLog(@"File Manager: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
UIBarButtonItem *startButton = [[UIBarButtonItem alloc] initWithTitle:@"Record" style:UIBarButtonItemStyleBordered target:self action:@selector(startRecording)];
self.navigationItem.rightBarButtonItem = startButton;
[startButton release];
}
- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *) aRecorder successfully:(BOOL)flag
{
NSLog (@"audioRecorderDidFinishRecording:successfully:");
// your actions here
}
Aunque esta es una pregunta respondida (y un poco antigua), he decidido publicar mi código de trabajo completo para otros que encontraron difícil encontrar un buen trabajo (listo para usar) en el ejemplo de reproducción y grabación, incluido codificado, pcm, reproducción por altavoz , escriba al archivo aquí es:
AudioPlayerViewController.h:
AudioPlayerViewController.m:
Espero que esto ayude a algunos de ustedes.
fuente
He subido un proyecto de muestra. Puedes echar un vistazo.
Grabadora de voz
fuente
Es realmente útil. El único problema que tuve fue el tamaño del archivo de sonido creado después de la grabación. Necesitaba reducir el tamaño del archivo, así que hice algunos cambios en la configuración.
El tamaño del archivo se redujo de 360 kb a solo 25 kb (grabación de 2 segundos).
fuente
He estado tratando de hacer que este código funcione durante las últimas 2 horas y, aunque no mostró ningún error en el simulador, hubo uno en el dispositivo.
Resulta que, al menos en mi caso, el error provino del directorio utilizado (paquete):
No fue editable o algo así ... No hubo ningún error, excepto el hecho de que prepareToRecord falló ...
Por lo tanto, lo reemplacé por:
Ahora funciona como un encanto.
Espero que esto ayude a otros.
fuente
Muchas gracias a @Massimo Cafaro y Shaybc pude lograr las siguientes tareas
en iOS 8:
1.Agregue "AVFoundation.framework" a su proyecto
en archivo .h
2.Agregue a continuación la declaración de importación 'AVFoundation / AVFoundation.h'.
3. Definir "AVAudioRecorderDelegate"
4.Cree un diseño con los botones Grabar, Reproducir y sus métodos de acción
5.Definir grabador y reproductor, etc.
Aquí está el código de ejemplo completo que puede ayudarlo.
Entonces haz el trabajo en
fuente
fuente
En el siguiente enlace puede encontrar información útil sobre la grabación con AVAudioRecording. En este enlace en la primera parte "Uso del audio" hay un ancla llamada "Grabación con la clase AVAudioRecorder". eso te lleva al ejemplo.
AudioVideo Conceptual MultimediaPG
fuente
Ok, la respuesta que recibí me ayudó en la dirección correcta y estoy muy agradecido. Me ayudó a descubrir cómo grabar realmente en el iPhone, pero pensé que también incluiría un código útil que obtuve de la Biblioteca de referencia del iPhone:
Tecnologías de audio y video
Usé este código y lo agregué al ejemplo de avTouch con bastante facilidad. Con el ejemplo de código anterior y el ejemplo de la biblioteca de referencia, pude hacer que esto funcionara bastante bien.
fuente
para formato wav debajo de la configuración de audio
ref: http://objective-audio.jp/2010/09/avassetreaderavassetwriter.html
fuente
let recordSettings:[String:AnyObject] = [ AVFormatIDKey:Int(kAudioFormatLinearPCM), AVLinearPCMIsFloatKey:false, AVLinearPCMIsBigEndianKey:0, AVLinearPCMIsNonInterleaved:false, AVSampleRateKey:44100.0, AVNumberOfChannelsKey:2, AVEncoderBitRateKey:12800, AVLinearPCMBitDepthKey:16, AVEncoderAudioQualityKey:AVAudioQuality.Max.rawValue]
COMIENZO
DETENER
fuente
fuente
Según las respuestas anteriores, hice algunos cambios y obtuve el resultado correcto.
Paso 1: en "inf.plist", agregue los permisos de uso del micrófono ==>
Paso 2:
Guarde el archivo de audio de grabación en el directorio de documentos locales
Reproducir / detener grabación
Aquí está el código fuente. Eche un vistazo de una vez y úselo.
ViewController.h
ViewController.m
fuente
-[NSUserDefaults synchronize]
. De la documentación de Apple "este método es innecesario y no debe usarse".