Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to resume recording after interruption occured in iphone?

I am working on an audio recorder application, it is working perfectly fine.

But I'm stuck with the problem of interruption. When a call comes,

- (void)audioRecorderBeginInterruption:(AVAudioRecorder *)recorder

then this method is called and the recording is paused.

And if the user rejects the call:

- (void)audioRecorderEndInterruption:(AVAudioRecorder *)recorder

Then here I want to resume the recording from the point where it was interrupted. But when I call the record method again, the recording starts with a new file.

like image 204
Jitendra Singh Avatar asked Nov 10 '09 06:11

Jitendra Singh


2 Answers

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);
like image 161
Raj Pawan Gumdal Avatar answered Oct 22 '22 18:10

Raj Pawan Gumdal


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).

like image 2
lucius Avatar answered Oct 22 '22 19:10

lucius