how to resume recording after interruption occured in iphone?

我只是一个虾纸丫 提交于 2019-11-28 23:50:02

The problem is solved!

I have re-written the recording code to avoid this problem. I used AudioQueues, basically the backend code is the same of SpeakHere application with some minor changes. Provided two more apis in it:

-(void)resume
{
    AudioQueueStart(queueObject, NULL);
}

-(void)pause
{
    AudioQueuePause(queueObject);
}

In AudioRecorder class. The basic purpose being to avoid the recording setup which is done in record method.

Setup the interrupt callback and then use this pause and resume methods appropriately in the callback. Also take care to set active the audio session based on whether your application needs it or not.

Hope this helps someone out there.

EDIT:

Audio interrupt listener callback:

void interruptionListenerCallback (void *inUserData, UInt32 interruptionState)
{
    if (interruptionState == kAudioSessionBeginInterruption) 
    {
        [self.audioRecorder pause];
    } 
    else if (interruptionState == kAudioSessionEndInterruption) 
    {
        // if the interruption was removed, and the app had been recording, resume recording
        [self.audioRecorder resume];
    }
}

Listening for audio interruption:

AudioSessionInitialize(NULL, NULL, interruptionListenerCallback, self);

The OS is probably stopping the AVAudioRecorder during the interruption. You can either present the two or more files as a single recording to the user, or you can use AudioQueue to write your code for handling interruptions (as well as saving audio data to a file).

I tried to do this a while ago and came to the conclusion that it couldn't be done properly; the operating system itself won't let you do it. Maybe that's changed in 3.1.2, but when I tried in 3.0 it just wouldn't work.

Ashish Maheshwari

To handle the interruption, you have to use AVAudioSessionDelegate methodes instead of AVAudioRecorderDelegate methods.This is the code sample for handling interruption:

/*=================================================================
 Interruption Handling Method during Recording
 ==================================================================*/

- (void) beginInterruption 
{
 if(self.recorder)
        {
  //Method to handle UI
 }
}

- (void) endInterruption
{

 NSError *err = noErr;
 [[AVAudioSession sharedInstance] setActive: YES error: &err];
 if(err != noErr)
 {
   NSLog([err description]);
 }
        //method to handle UI
} 

First method automatically deactivate the audio session.So,in second method,you have to reactivate the audio session.First method will pause the recording and when interruption ends you can resume with second method.I have tried this on version 3.0 and upper version.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!