voz tiempo sonido para pantalla notas interno grabar graba cuanto con como app ios objective-c iphone audio recording

ios - tiempo - ¿Cómo grabo audio en un iPhone con AVAudioRecorder?



grabar pantalla iphone 7 (12)

Aunque esta es una pregunta contestada (y algo así como antigua) he decidido publicar mi código de trabajo completo para otros que encontraron difícil encontrar un buen ejemplo de reproducción y reproducción (listo para usar), incluidos codificados, pcm, reproducir a través del altavoz , escriba en el archivo aquí es:

AudioPlayerViewController.h:

#import <UIKit/UIKit.h> #import <AVFoundation/AVFoundation.h> @interface AudioPlayerViewController : UIViewController { AVAudioPlayer *audioPlayer; AVAudioRecorder *audioRecorder; int recordEncoding; enum { ENC_AAC = 1, ENC_ALAC = 2, ENC_IMA4 = 3, ENC_ILBC = 4, ENC_ULAW = 5, ENC_PCM = 6, } encodingTypes; } -(IBAction) startRecording; -(IBAction) stopRecording; -(IBAction) playRecording; -(IBAction) stopPlaying; @end

AudioPlayerViewController.m:

#import "AudioPlayerViewController.h" @implementation AudioPlayerViewController - (void)viewDidLoad { [super viewDidLoad]; recordEncoding = ENC_AAC; } -(IBAction) startRecording { NSLog(@"startRecording"); [audioRecorder release]; audioRecorder = nil; // Init audio with record capability AVAudioSession *audioSession = [AVAudioSession sharedInstance]; [audioSession setCategory:AVAudioSessionCategoryRecord error:nil]; NSMutableDictionary *recordSettings = [[NSMutableDictionary alloc] initWithCapacity:10]; if(recordEncoding == ENC_PCM) { [recordSettings setObject:[NSNumber numberWithInt: kAudioFormatLinearPCM] forKey: AVFormatIDKey]; [recordSettings setObject:[NSNumber numberWithFloat:44100.0] forKey: AVSampleRateKey]; [recordSettings setObject:[NSNumber numberWithInt:2] forKey:AVNumberOfChannelsKey]; [recordSettings setObject:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey]; [recordSettings setObject:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey]; [recordSettings setObject:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey]; } else { NSNumber *formatObject; switch (recordEncoding) { case (ENC_AAC): formatObject = [NSNumber numberWithInt: kAudioFormatMPEG4AAC]; break; case (ENC_ALAC): formatObject = [NSNumber numberWithInt: kAudioFormatAppleLossless]; break; case (ENC_IMA4): formatObject = [NSNumber numberWithInt: kAudioFormatAppleIMA4]; break; case (ENC_ILBC): formatObject = [NSNumber numberWithInt: kAudioFormatiLBC]; break; case (ENC_ULAW): formatObject = [NSNumber numberWithInt: kAudioFormatULaw]; break; default: formatObject = [NSNumber numberWithInt: kAudioFormatAppleIMA4]; } [recordSettings setObject:formatObject forKey: AVFormatIDKey]; [recordSettings setObject:[NSNumber numberWithFloat:44100.0] forKey: AVSampleRateKey]; [recordSettings setObject:[NSNumber numberWithInt:2] forKey:AVNumberOfChannelsKey]; [recordSettings setObject:[NSNumber numberWithInt:12800] forKey:AVEncoderBitRateKey]; [recordSettings setObject:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey]; [recordSettings setObject:[NSNumber numberWithInt: AVAudioQualityHigh] forKey: AVEncoderAudioQualityKey]; } NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/recordTest.caf", [[NSBundle mainBundle] resourcePath]]]; NSError *error = nil; audioRecorder = [[ AVAudioRecorder alloc] initWithURL:url settings:recordSettings error:&error]; if ([audioRecorder prepareToRecord] == YES){ [audioRecorder record]; }else { int errorCode = CFSwapInt32HostToBig ([error code]); NSLog(@"Error: %@ [%4.4s])" , [error localizedDescription], (char*)&errorCode); } NSLog(@"recording"); } -(IBAction) stopRecording { NSLog(@"stopRecording"); [audioRecorder stop]; NSLog(@"stopped"); } -(IBAction) playRecording { NSLog(@"playRecording"); // Init audio with playback capability AVAudioSession *audioSession = [AVAudioSession sharedInstance]; [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil]; NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/recordTest.caf", [[NSBundle mainBundle] resourcePath]]]; NSError *error; audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; audioPlayer.numberOfLoops = 0; [audioPlayer play]; NSLog(@"playing"); } -(IBAction) stopPlaying { NSLog(@"stopPlaying"); [audioPlayer stop]; NSLog(@"stopped"); } - (void)dealloc { [audioPlayer release]; [audioRecorder release]; [super dealloc]; } @end

Espero que esto ayude a algunos de ustedes, chicos.

Ahora que iPhone 3.0 sdk es público, creo que puedo hacer esta pregunta para aquellos de ustedes que ya han estado jugando con la sdk 3.0. Quiero grabar audio en mi aplicación, pero quiero usar AVAudioRecorder y no la forma más antigua de grabar como muestra el ejemplo de SpeakHere. No hay ejemplos de cómo hacer mejor esto en el Centro de desarrollo de iPhone y solo hacer referencia a las clases. Soy un novato en el desarrollo de iPhone, así que estoy buscando una muestra simple para comenzar. Gracias por adelantado.


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 delimitador llamado "Grabación con la clase AVAudioRecorder" que lo guía al ejemplo.

AudioVideo Conceptual MultimediaPG


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. Cuidado: si desea utilizar un formato diferente, especialmente uno codificado, asegúrese de comprender completamente cómo configurar los ajustes de AVAudioRecorder (lea atentamente 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 averiguarlo 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 se realiza la grabación, guardo el audio grabado como NSData en el objeto editado actualmente 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 }


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.

NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init]; [recordSetting setValue :[NSNumber numberWithInt:kAudioFormatAppleIMA4] forKey:AVFormatIDKey]; [recordSetting setValue:[NSNumber numberWithFloat:16000.0] forKey:AVSampleRateKey]; [recordSetting setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey];

Tamaño de archivo reducido de 360 ​​kb a solo 25 kb (grabación de 2 segundos).


Gracias a @Masimo Cafaro y Shaybc pude lograr las siguientes tareas

en iOS 8:

Grabar audio y guardar

Reproducir grabación guardada

1.Agrega "AVFoundation.framework" a tu proyecto

en archivo .h

2. Añada a continuación la instrucción de importación ''AVFoundation / AVFoundation.h''.

3.Defina "AVAudioRecorderDelegate"

4. Cree un diseño con los botones Grabar, Reproducir y sus acción methids

5. Definir grabadora y reproductor, etc.

Aquí está el código de ejemplo completo que puede ayudarlo.

ViewController.h

#import <UIKit/UIKit.h> #import <AVFoundation/AVFoundation.h> @interface ViewController : UIViewController <AVAudioRecorderDelegate> @property(nonatomic,strong) AVAudioRecorder *recorder; @property(nonatomic,strong) NSMutableDictionary *recorderSettings; @property(nonatomic,strong) NSString *recorderFilePath; @property(nonatomic,strong) AVAudioPlayer *audioPlayer; @property(nonatomic,strong) NSString *audioFileName; - (IBAction)startRecording:(id)sender; - (IBAction)stopRecording:(id)sender; - (IBAction)startPlaying:(id)sender; - (IBAction)stopPlaying:(id)sender; @end

Entonces haz el trabajo en

ViewController.m

#import "ViewController.h" #define DOCUMENTS_FOLDER [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] @interface ViewController () @end @implementation ViewController @synthesize recorder,recorderSettings,recorderFilePath; @synthesize audioPlayer,audioFileName; #pragma mark - View Controller Life cycle methods - (void)viewDidLoad { [super viewDidLoad]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } #pragma mark - Audio Recording - (IBAction)startRecording:(id)sender { AVAudioSession *audioSession = [AVAudioSession sharedInstance]; NSError *err = nil; [audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err]; if(err) { NSLog(@"audioSession: %@ %ld %@", [err domain], (long)[err code], [[err userInfo] description]); return; } [audioSession setActive:YES error:&err]; err = nil; if(err) { NSLog(@"audioSession: %@ %ld %@", [err domain], (long)[err code], [[err userInfo] description]); return; } recorderSettings = [[NSMutableDictionary alloc] init]; [recorderSettings setValue :[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey]; [recorderSettings setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey]; [recorderSettings setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey]; [recorderSettings setValue :[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey]; [recorderSettings setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey]; [recorderSettings setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey]; // Create a new audio file audioFileName = @"recordingTestFile"; recorderFilePath = [NSString stringWithFormat:@"%@/%@.caf", DOCUMENTS_FOLDER, audioFileName] ; NSURL *url = [NSURL fileURLWithPath:recorderFilePath]; err = nil; recorder = [[ AVAudioRecorder alloc] initWithURL:url settings:recorderSettings error:&err]; if(!recorder){ NSLog(@"recorder: %@ %ld %@", [err domain], (long)[err code], [[err userInfo] description]); UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Warning" message: [err localizedDescription] delegate: nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; 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]; return; } // start recording [recorder recordForDuration:(NSTimeInterval) 60];//Maximum recording time : 60 seconds default NSLog(@"Recroding Started"); } - (IBAction)stopRecording:(id)sender { [recorder stop]; NSLog(@"Recording Stopped"); } - (void)audioRecorderDidFinishRecording:(AVAudioRecorder *) aRecorder successfully:(BOOL)flag { NSLog (@"audioRecorderDidFinishRecording:successfully:"); } #pragma mark - Audio Playing - (IBAction)startPlaying:(id)sender { NSLog(@"playRecording"); AVAudioSession *audioSession = [AVAudioSession sharedInstance]; [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil]; NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/%@.caf", DOCUMENTS_FOLDER, audioFileName]]; NSError *error; audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; audioPlayer.numberOfLoops = 0; [audioPlayer play]; NSLog(@"playing"); } - (IBAction)stopPlaying:(id)sender { [audioPlayer stop]; NSLog(@"stopped"); } @end


He intentado que este código funcione durante las últimas 2 horas y aunque no mostró ningún error en el simulador, había uno en el dispositivo.

Resulta, al menos en mi caso, que el error vino del directorio utilizado (paquete):

NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/recordTest.caf", [[NSBundle mainBundle] resourcePath]]];

No fue escribible o algo así ... No hubo ningún error, excepto el hecho de que prepareToRecord falló ...

Por lo tanto, lo reemplacé por:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *recDir = [paths objectAtIndex:0]; NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/recordTest.caf", recDir]]

Ahora funciona como un encanto.

Espero que esto ayude a otros.


He subido un proyecto de muestra. Puedes echar un vistazo.

VoiceRecorder


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 algún código útil que obtuve de la Biblioteca de Referencia del iPhone:

AudioandVideoTechnologies

Usé este código y lo agregué al ejemplo de avTouch bastante fácilmente. Con la muestra de código anterior y la muestra de la biblioteca de referencia, pude hacer que esto funcionara bastante bien.


para formato wav debajo de configuración de audio

NSDictionary *audioSetting = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithFloat:44100.0],AVSampleRateKey, [NSNumber numberWithInt:2],AVNumberOfChannelsKey, [NSNumber numberWithInt:16],AVLinearPCMBitDepthKey, [NSNumber numberWithInt:kAudioFormatLinearPCM],AVFormatIDKey, [NSNumber numberWithBool:NO], AVLinearPCMIsFloatKey, [NSNumber numberWithBool:0], AVLinearPCMIsBigEndianKey, [NSNumber numberWithBool:NO], AVLinearPCMIsNonInterleaved, [NSData data], AVChannelLayoutKey, nil];

ref: http://objective-audio.jp/2010/09/avassetreaderavassetwriter.html


COMIENZO

NSError *sessionError = nil; [[AVAudioSession sharedInstance] setDelegate:self]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError]; [[AVAudioSession sharedInstance] setActive: YES error: nil]; UInt32 doChangeDefaultRoute = 1; AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(doChangeDefaultRoute), &doChangeDefaultRoute); NSError *error = nil; NSString *filename = [NSString stringWithFormat:@"%@.caf",FILENAME]; NSString *path = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:filename]; NSURL *soundFileURL = [NSURL fileURLWithPath:path]; NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt: kAudioFormatMPEG4AAC], AVFormatIDKey, [NSNumber numberWithInt:AVAudioQualityMedium],AVEncoderAudioQualityKey, [NSNumber numberWithInt:AVAudioQualityMedium], AVSampleRateConverterAudioQualityKey, [NSNumber numberWithInt: 1], AVNumberOfChannelsKey, [NSNumber numberWithFloat:22050.0],AVSampleRateKey, nil]; AVAudioRecorder *audioRecorder = [[AVAudioRecorder alloc] initWithURL:soundFileURL settings:recordSettings error:&error]; if (!error && [audioRecorder prepareToRecord]) { [audioRecorder record]; }

DETENER

[audioRecorder stop]; [audioRecorder release]; audioRecorder = nil;


-(void)viewDidLoad { // Setup audio session AVAudioSession *session = [AVAudioSession sharedInstance]; [session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; // Define the recorder setting NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init]; [recordSetting setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey]; [recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey]; [recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey]; // Initiate and prepare the recorder recorder = [[AVAudioRecorder alloc] initWithURL:outputFileURL settings:recordSetting error:NULL]; recorder.delegate = self; recorder.meteringEnabled = YES; [recorder prepareToRecord]; } - (IBAction)btnRecordDidClicked:(UIButton *)sender { if (player1.playing) { [player1 stop]; } if (!recorder.recording) { AVAudioSession *session = [AVAudioSession sharedInstance]; [session setActive:YES error:nil]; // Start recording [recorder record]; [_recordTapped setTitle:@"Pause" forState:UIControlStateNormal]; } else { // Pause recording [recorder pause]; [_recordTapped setTitle:@"Record" forState:UIControlStateNormal]; } [_stopTapped setEnabled:YES]; [_playTapped setEnabled:NO]; } - (IBAction)btnPlayDidClicked:(UIButton *)sender { if (!recorder.recording){ player1 = [[AVAudioPlayer alloc] initWithContentsOfURL:recorder.url error:nil]; [player1 setDelegate:self]; [player1 play]; } } - (IBAction)btnStopDidClicked:(UIButton *)sender { [recorder stop]; AVAudioSession *audioSession = [AVAudioSession sharedInstance]; [audioSession setActive:NO error:nil]; } - (void) audioRecorderDidFinishRecording:(AVAudioRecorder *)avrecorder successfully:(BOOL)flag{ [_recordTapped setTitle:@"play" forState:UIControlStateNormal]; [_stopTapped setEnabled:NO]; [_playTapped setEnabled:YES]; }


This is from Multimedia programming guide... - (IBAction) recordOrStop: (id) sender { if (recording) { [soundRecorder stop]; recording = NO; self.soundRecorder = nil; [recordOrStopButton setTitle: @"Record" forState: UIControlStateNormal]; [recordOrStopButton setTitle: @"Record" forState: UIControlStateHighlighted]; [[AVAudioSession sharedInstance] setActive: NO error:nil]; } else { [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryRecord error: nil]; NSDictionary *recordSettings = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithFloat: 44100.0], AVSampleRateKey, [NSNumber numberWithInt: kAudioFormatAppleLossless], AVFormatIDKey, [NSNumber numberWithInt: 1], AVNumberOfChannelsKey, [NSNumber numberWithInt: AVAudioQualityMax], AVEncoderAudioQualityKey, nil]; AVAudioRecorder *newRecorder = [[AVAudioRecorder alloc] initWithURL: soundFileURL settings: recordSettings error: nil]; [recordSettings release]; self.soundRecorder = newRecorder; [newRecorder release]; soundRecorder.delegate = self; [soundRecorder prepareToRecord]; [soundRecorder record]; [recordOrStopButton setTitle: @"Stop" forState: UIControlStateNormal]; [recordOrStopButton setTitle: @"Stop" forState: UIControlStateHighlighted]; recording = YES; } }