使用cordova媒体插件录制音频会导致空文件

时间:2016-01-05 04:59:15

标签: android cordova audio

我正在使用以下代码在Android设备上使用Cordova Media插件录制音频。尽管在stopRecord()上成功返回,但这会导致空音频文件。有人可以指出这段代码可能有什么问题吗?

$cordovaFile.createFile(cordova.file.dataDirectory, 'new-rec.amr'), false)
    .then(function (fileObj) {
      console.log('File created', fileObj);

      var nativePath = fileObj.nativeURL;
      resolveLocalFileSystemURL(nativePath, function (entry) {
        var internalPath = entry.toInternalURL();

        var mediaRec = new Media(internalPath,
          //success callback
          function (success) {
            console.log("record success", success);
          },

          //error callback
          function (err) {
            console.log("record error: " + JSON.stringify(err));
          });

        // Start recording audio
        mediaRec.startRecord();
      });
    }, function (error) {
      console.log('Cannot create a file to initiate a new recording', error);
    });

1 个答案:

答案 0 :(得分:1)

我今天遇到了同样的问题。通过释放Media对象解决了这个问题。我不确定为什么这会有所帮助,但我觉得操作系统可能会保留Media对象而不是保存它然后一旦它被释放它就被正确保存了?

虽然不是100%肯定。它不会在其他Cordova目录中释放(例如cordova.file.externalDataDirectory)。

这是我的代码:

var fileName = randomFileName();   
fileName = fileName + ".aac";
var store = cordova.file.dataDirectory;

window.resolveLocalFileSystemURL(store, function(dir){

    var directoryToSave = dir.nativeURL + fileName;        

    $scope.audioRecording = new Media(directoryToSave, audioRecordingSuccess, audioRecordingFail, audioStatus);

    $scope.audioRecording.startRecord();

    setTimeout(function(){
        $scope.audioRecording.stopRecord();
        $scope.audioRecording.release();
    }, 5000);

});