Question

I am making a simple recorder for iOS 5.0+ using Cordova's Media API. I am giving the user ability to start-pause-resume-stop recording an audio.

The three buttons that I have defined are

Start Recording

Stop Recording

Pause/Resume Recording

I am able to successfully start & stop a recording. What I am unable to do is pause a recording and then resume it again.

I referred to the Media API examples of Cordova and have used somewhat as is in my code as well.

Kindly help !!!

Was it helpful?

Solution

I was able to invoke the pause and resume functionalities of recorder using Media API by extending the Media API plugin.

Following is the solution of the same:

NATIVE PART OF MEDIA API PLUGIN

Add the following methods to CDVSound.m

CDVSound.m

- (void)resumeRecordingAudio:(CDVInvokedUrlCommand*)command
 {
    NSString* mediaId = [command.arguments objectAtIndex:0];

    CDVAudioFile* audioFile = [[self soundCache] objectForKey:mediaId];
    NSString* jsString = nil;

    if ((audioFile != nil) && (audioFile.recorder != nil)) {
        NSLog(@"Resumed recording audio sample '%@'", audioFile.resourcePath);
        [audioFile.recorder record];
        // no callback - that will happen in audioRecorderDidFinishRecording
    }
    // ignore if no media recording
    if (jsString) {
        [self.commandDelegate evalJs:jsString];
    }
}

- (void)pauseRecordingAudio:(CDVInvokedUrlCommand*)command
 {
    NSString* mediaId = [command.arguments objectAtIndex:0];

    CDVAudioFile* audioFile = [[self soundCache] objectForKey:mediaId];
    NSString* jsString = nil;

    if ((audioFile != nil) && (audioFile.recorder != nil)) {
        NSLog(@"Paused recording audio sample '%@'", audioFile.resourcePath);
        [audioFile.recorder pause];
        // no callback - that will happen in audioRecorderDidFinishRecording
    }
    // ignore if no media recording
    if (jsString) {
        [self.commandDelegate evalJs:jsString];
    }
}

JAVASCRIPT PART OF MEDIA API PLUGIN

Add the following code to the Media.js file under www folder of org.apache.cordova.media.

make sure you add the code below the Media.prototype.startRecord function.

/**
 * Pause recording audio file.
 */
Media.prototype.pauseRecord = function() {
exec(null, this.errorCallback, "Media", "pauseRecordingAudio", [this.id]);
};

/**
* Resume recording audio file.
*/
Media.prototype.resumeRecord = function() {
exec(null, this.errorCallback, "Media", "resumeRecordingAudio", [this.id]);
};

Once you have extended the plugin, you simply have to call nameOfRecorder.pauseRecord(); and nameOfRecorder.resumeRecord(); as per your needs and requirements.

PS: I am using Cordova 3.3 with XCode 5.0.2

Hope this helps.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top