Search code examples
iphoneiosavaudioplayeravaudiorecorder

Record the sound through AVAudioRecorder


I want to record the sound and want to save the recorded file into document directory:- Had done Like:-

[[AVAudioSession sharedInstance]
         setCategory: AVAudioSessionCategoryRecord
         error: nil];
    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];

        recorderFilePath = [[NSString stringWithFormat:@"%@/Audio.caf", DOCUMENTS_FOLDER] retain];
        NSURL *soundFileURL=[NSURL URLWithString:recorderFilePath];

    recorderFilePath = [[NSString stringWithFormat:@"%@/Audio.caf", DOCUMENTS_FOLDER] retain];

    NSURL *soundFileURL = [NSURL fileURLWithPath:recorderFilePath];


        NSLog(@"str==>%@ soundurl==>%@",recorderFilePath,soundFileURL);
        AVAudioRecorder *newRecorder =
        [[AVAudioRecorder alloc] initWithURL: url
                                    settings: settings
                                       error: nil];

 newRecorder.delegate = self;
        [newRecorder prepareToRecord];
        [newRecorder record];

and [recorder stop]; when stop recording is done.

Had seen this :- this

and coded accordingly..But still i am not able to create any .caf file into the document folder.


Solution

  • Once go through below code it might be helpful to you. First take object for AVAudioRecorder as AVAudioRecorder *audioRecorder;

    -(void)viewWillAppear:(BOOL)animated{
    
        NSArray *dirPaths;
        NSString *docsDir;
    
        dirPaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
        //here i took cache directory as saved directory you can also take   NSDocumentDirectory
        docsDir = [dirPaths objectAtIndex:0];
    
        NSString *soundFilePath = [docsDir stringByAppendingPathComponent:@"sound.caf"];//at this path your recorded audio will be saved
    
        NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];
    
        NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
    
                                                        [NSNumber numberWithInt:AVAudioQualityMin],
                                                        AVEncoderAudioQualityKey,
    
                                                        [NSNumber numberWithInt:16], 
                                                        AVEncoderBitRateKey,
    
                                                        [NSNumber numberWithInt: 2], 
                                                        AVNumberOfChannelsKey,
    
                                                        [NSNumber numberWithFloat:44100.0], 
                                                        AVSampleRateKey,
                                                        nil];
    
        NSError *error = nil;
        audioRecorder = [[AVAudioRecorder alloc]initWithURL:soundFileURL settings:recordSettings error:&error];
    
        if( !audioRecorder ) {
    
            UIAlertView *alert  =
            [[UIAlertView alloc] initWithTitle: @"Warning" message: [error localizedDescription] delegate: nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
            return;
    
        }
    
        if ( error )
        {
            NSLog( @"error: %@", [error localizedDescription] );
        }
        else {
            [audioRecorder prepareToRecord];
            [self recordAudio];//Mehod to Record Audio
        }
    
    }
    

    Now define method to record Audio,

     -(void) recordAudio
     {
         if (!audioRecorder.recording)
          {
           audioRecorder.delegate = self;
          [audioRecorder recordForDuration:10];//Here i took record duration as 10 secs 
    
         }
    

    }

    Now you can write AvAudio record DelegateMethods as,

    -(void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:      (BOOL)flag
     {
      //Your code after sucessful recording;
     }
    -(void)audioRecorderEncodeErrorDidOccur:(AVAudioRecorder *)recorder error:(NSError *)error
     {
    NSLog(@"Encode Error occurred");
    }
    

    hope it will helps to you...