Cordova 3.3使用Media API暂停和恢复录制

时间:2014-01-27 11:56:01

标签: ios cordova phonegap-plugins audio-recording cordova-3

我正在使用Cordova的Media API为iOS 5.0+制作一个简单的录音机。我正在为用户提供启动 - 暂停 - 恢复 - 停止录制音频的能力。

我定义的三个按钮是

开始录制

停止录制

暂停/恢复录制

我能够成功启动&停止录音。我无法做的是暂停录音,然后重新开始录音。

我提到了Cordova的Media API examples,并且在我的代码中也使用了一些。

请帮助!!!

1 个答案:

答案 0 :(得分:9)

通过扩展Media API插件,我能够使用Media API调用记录器的暂停和恢复功能。

以下是相同的解决方案:

媒体API插件的原始部分

将以下方法添加到 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];
    }
}

媒体API插件的JAVASCRIPT部分

将以下代码添加到 org.apache.cordova.media www 文件夹下的 Media.js 文件中。

确保在 Media.prototype.startRecord 功能下添加代码。

/**
 * 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]);
};

扩展插件后,只需调用 nameOfRecorder .pauseRecord();和 nameOfRecorder .resumeRecord();根据您的需求和要求。

PS:我正在使用Cordova 3.3和XCode 5.0.2

希望这有帮助。