Skip navigation

AvAudioRecorder, create corrupted file on random check

397 Views 0 Replies Latest reply: Oct 12, 2012 5:30 AM by iphone_alliancetek RSS
iphone_alliancetek Calculating status...
Currently Being Moderated
Oct 12, 2012 5:30 AM

Hello,

I face issue with AvAudioRecorder, create corrupted file on random check.

 

below is complete functionality code.

 

 

-(IBAction)btnRecordClick:(id)sender {

   

    [PlayingTimer invalidate];

    PlayingTimer = nil;

   

    if (isPaused==NO) {

       

        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;

        }

        //*******Working well with .wav,.caf and .mp4 files *****************

        recordSetting = [[NSMutableDictionary alloc] init];

        //this is for .wav and .caf file

       

        //this is for .mp4 file for iPhone 3GS/iPhone 4

      

        [recordSetting setValue: [NSNumber numberWithInt:kAudioFormatMPEG4AAC] 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];

    

    

        self.strMessage = @"";

        self.strMessageType = [NSString stringWithFormat:@"Audio Message"];

        self.strFileName = [NSString stringWithFormat:@"%@.mp4", [_globalmodel stringUniqueID]];

        // NSLog(@"FileName :%@",self.strFileName);

       

        self.strUniqueRef = [NSString stringWithFormat:@"%@",[_globalmodel stringUniqueID]];

       

 

        NSString *soundPath;//=[NSString alloc];

        soundPath = [NSString stringWithFormat:@"%@/%@", DOCUMENTS_FOLDER,self.strFileName] ;

        NSURL *url1 = [NSURL fileURLWithPath:soundPath];

       

 

        // NSLog(@"Recording Path:%@",url1);

        err = nil;

        recorder = [[ AVAudioRecorder alloc] initWithURL:url1 settings:recordSetting error:&err];

        if(!recorder){

            // NSLog(@"recorder: %@ %d %@", [err domain], [err code], [[err userInfo] description]);

           

            UIAlertView *alert =[[UIAlertView alloc] initWithTitle: @"My Easy Media"

                                                           message: @"The Recording format is not supported on your device!"

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

       

       

        _isRecordingStarted = YES;

       

        // SET TIMER // START TIMER

        timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(EndRecording:)

                                               userInfo:nil repeats:YES];

        // END TO SETTING TIMER

       

       

        timerDisplayRight.hidden = NO;

        timerDisplayLeft.hidden = NO;

       

        timerDisplayRight.text = [NSString stringWithFormat:@"%02d:%02d", intMimute,-- intSecond];

        timerDisplayLeft.text = [NSString stringWithFormat:@"00:00"];

       

        progressView.progress = 0.0;

       

    }

    else {

       

       

        isPaused=NO;

        [recorder record];

       

        _isRecordingStarted = YES;

       

        [btnReview setEnabled:NO];

       

        timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(EndRecording:)

                                               userInfo:nil repeats:YES];

       

       

        timerDisplayRight.hidden = NO;

        timerDisplayLeft.hidden = NO;

    }

   

    timerDisplayRight.text = [NSString stringWithFormat:@"%02d:%02d", intMimute,-- intSecond];

   

 

}

 

-(IBAction)btnPauseClick:(id)sender {

   

    // NSLog(@"Pause Button of ActionSheet Clicked");

   

   

    [timer invalidate];

    timer = nil;

    isPaused=YES;

    [recorder pause];

   

    [btnPause setEnabled:NO];

   

    [btnRecord setEnabled:YES];

   

    [btnStop setEnabled:YES];

   

   

   

   

}

 

-(IBAction)btnStopClick:(id)sender {

   

    // NSLog(@"Stop Button of ActionSheet Clicked");

   

    [recorder stop];

   

    progressView.progress = 1.0;

    // NSLog(@"Total Recording Secomd : %d", totalRecordingSecond);

   

    finalRecordingSecond = totalRecordingSecond;

   

    [btnStop setEnabled:NO];

    [btnReview setEnabled:YES];

    [btnRecord setEnabled:YES];

   

    [btnPause setEnabled:NO];

   

   

    timerDisplayRight.text = [NSString stringWithFormat:@"%02d:%02d", (totalRecordingSecond/60), (totalRecordingSecond % 60) ];

    timerDisplayLeft.text = [NSString stringWithFormat:@"00:00"];

   

    [timer invalidate];

    timer = nil;

   

    // REINITIALIZE TIMER VARIABLES...

    intMimute =  5;

   

    intTotalTime = (60 * intMimute);   

    intSecond = intTotalTime / intMimute;

   

   

    intMimute--;       

    // REINITIALIZE TIMER VARIABLES...       

   

   

    _isRecordingStarted = NO;

   

   

   

   

}

 

 

 

 

Please help.

once we start recored and after near about 10 to 15 second, tap on stop.

It create file with length 24kb, which is not occured all time, but randomly found file is courrupted.

iPhone 4, iOS 5.1.1

Actions

More Like This

  • Retrieving data ...

Bookmarked By (0)

Legend

  • This solved my question - 10 points
  • This helped me - 5 points
This site contains user submitted content, comments and opinions and is for informational purposes only. Apple disclaims any and all liability for the acts, omissions and conduct of any third parties in connection with or related to your use of the site. All postings and use of the content on this site are subject to the Apple Support Communities Terms of Use.