2016-01-05 29 views
5

Używam poniższego kodu do nagrywania dźwięku za pomocą wtyczki Cordova Media na urządzeniach z systemem Android. Powoduje to pusty plik audio pomimo powodzenia w stopRecord(). Czy ktoś może wskazać, co może być nie tak z tym kodem?Nagrywanie dźwięku za pomocą wtyczki cordova media skutkuje pustym plikiem

$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); 
    }); 
+0

Wszelkie szczęścia z tym? Mam ten sam problem –

Odpowiedz

0

Dzisiaj miałem ten sam problem. Rozwiązano, zwalniając obiekt Media. Nie jestem pewien, dlaczego to pomogło, ale mam wrażenie, że system operacyjny trzyma obiekt Media zamiast go zapisywać, a po jego wydaniu jest poprawnie zapisany?

Nie jest to jednak w 100% pewne. Działa bez zwolnienia w innych katalogach Cordova (np. Cordova.file.externalDataDirectory).

Oto mój kod:

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

});