Comment save de l'audio sur iPhone avec AVAudioRecorder?

Maintenant que l'iPhone 3.0 SDK est public, je pense que je peux poser cette question pour ceux d'entre vous qui ont déjà joué avec le 3.0 sdk. Je veux save de l'audio dans mon application, mais je veux utiliser AVAudioRecorder et pas l'ancienne façon d'save comme l'exemple montre SpeakHere. Il n'y a pas d'exemples de la meilleure façon de le faire dans le Centre de développement iPhone et seulement une reference aux classs. Je suis un débutant au développement de l'iPhone, donc je cherche un échantillon simple pour me lancer. Merci d'avance.

En fait, il n'y a pas d'exemples du tout. Voici mon code de travail. L'logging est déclenché par l'user en appuyant sur un button sur le navBar. L'logging utilise la qualité cd (44100 échantillons), stéréo (2 canaux) linéaire pcm. Attention: si vous souhaitez utiliser un format différent, en particulier s'il est codé, assurez-vous de bien comprendre comment régler les parameters de AVAudioRecorder (lisez attentivement la documentation des types audio), sinon vous ne pourrez jamais l'initialiser correctement. Encore une chose. Dans le code, je ne montre pas comment gérer datatables de mesure, mais vous pouvez facilement le comprendre. Enfin, notez que la méthode AVAudioRecorder deleteRecording au moment de cette écriture bloque votre application. C'est pourquoi je supprime le file enregistré via le gestionnaire de files. Quand l'logging est terminé, je sauvegarde l'audio enregistré en tant que NSData dans l'object actuellement édité en utilisant KVC.

#define DOCUMENTS_FOLDER [NSHomeDirectory() ssortingngByAppendingPathComponent:@"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]; NSSsortingng *caldate = [now description]; recorderFilePath = [[NSSsortingng ssortingngWithFormat:@"%@/%@.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 } 

Bien que ce soit une question répondue (et genre de vieux) j'ai décidé de postr mon code de travail complet pour d'autres qui ont eu du mal à find un bon exemple de lecture et d'logging – inclus codé, pcm, lecture via haut-parleur , écrivez au file ici c'est:

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:[NSSsortingng ssortingngWithFormat:@"%@/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:[NSSsortingng ssortingngWithFormat:@"%@/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 

J'espère que cela aidera certains d'entre vous.

J'ai téléchargé un exemple de projet. Vous pouvez jeter un coup d'oeil.

Enregistreur vocal

C'est vraiment utile. Le seul problème que j'avais était la taille du file son créé après l'logging. J'avais besoin de réduire la taille du file, donc j'ai fait quelques changements dans les parameters.

 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]; 

Taille de file réduite de 360 ​​Ko à 25 Ko (logging de 2 secondes).

J'ai essayé de faire fonctionner ce code pendant les 2 dernières heures et bien qu'il n'y ait aucune erreur sur le simulateur, il y en avait un sur l'appareil.

Il s'avère, au less dans mon cas, que l'erreur provient du directory utilisé (bundle):

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

Ce n'était pas accessible en écriture ou quelque chose comme ça … Il n'y avait pas d'erreur sauf le fait que prepareToRecord a échoué …

Je l'ai donc remplacé par:

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

Il fonctionne maintenant comme un charme.

J'espère que cela aide les autres.

Un grand merci à @Massimo Cafaro et Shaybc j'ai pu réaliser les tâches ci-dessous

dans iOS 8:

Enregistrer l'audio et save

Lecture de l'logging enregistré

1.Ajouter "AVFoundation.framework" à votre projet

dans le file .h

2. Ajoutez l'instruction d'import "AVFoundation / AVFoundation.h" ci-dessous.

3.Définissez "AVAudioRecorderDelegate"

4.Créer une layout avec Record, Play et leurs methods d'action

5.Define Recorder et Player etc.

Voici l'exemple de code complet qui peut vous aider.

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) NSSsortingng *recorderFilePath; @property(nonatomic,strong) AVAudioPlayer *audioPlayer; @property(nonatomic,strong) NSSsortingng *audioFileName; - (IBAction)startRecording:(id)sender; - (IBAction)stopRecording:(id)sender; - (IBAction)startPlaying:(id)sender; - (IBAction)stopPlaying:(id)sender; @end 

Ensuite, faites le travail dans

ViewController.m

 #import "ViewController.h" #define DOCUMENTS_FOLDER [NSHomeDirectory() ssortingngByAppendingPathComponent:@"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 = [NSSsortingng ssortingngWithFormat:@"%@/%@.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:[NSSsortingng ssortingngWithFormat:@"%@/%@.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 

entrez la description de l'image ici

 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; } } 

Dans le lien suivant, vous findez des informations utiles sur l'logging avec AVAudioRecording. Dans ce lien dans la première partie "USing Audio" il y a une ancre nommée "Enregistrement avec la class AVAudioRecorder." Qui vous amène à l'exemple.

AudioVideo Conceptual MultimediaPG

Ok donc la réponse que j'ai eu m'a aidé dans la bonne direction et je suis très reconnaissant. Cela m'a aidé à comprendre comment save réellement sur l'iPhone, mais j'ai pensé que j'inclurais aussi un code utile de la bibliothèque de reference de l'iPhone:

AudioandVideoTechnologies

J'ai utilisé ce code et l'ai ajouté à l'exemple avTouch assez facilement. Avec l'exemple de code ci-dessus et l'échantillon de la bibliothèque de reference, j'ai réussi à faire fonctionner cela plutôt bien.

pour le format wav en dessous du réglage 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

DÉBUT

 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; NSSsortingng *filename = [NSSsortingng ssortingngWithFormat:@"%@.caf",FILENAME]; NSSsortingng *path = [[NSHomeDirectory() ssortingngByAppendingPathComponent:@"Documents"] ssortingngByAppendingPathComponent: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]; } 

ARRÊTEZ

 [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]; }