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 !!!
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With