Вопрос

Я пытаюсь загрузить захваченный аудиофайл с помощью API файлов PhoneGap.Я записываю аудиофайл в формате mp3, затем нахожу его в файловой системе и позже загружаю на сервер.Запись файла работает нормально, и я могу воспроизвести его в своем локальном хранилище.Загрузка файла также работает нормально, но я не могу воспроизвести загруженный mp3-файл.Итак, о чем я спрашиваю;это правильный путь к записанному файлу, который я пытаюсь загрузить, и действительно ли я получаю правильную строку в кодировке Base64 из медиа-файла, или я создаю новый файл, поскольку мое устройство не может найти файл, который я ищу.На данный момент я работаю с Android, но если есть какие-то особенности iOS, мне бы тоже очень хотелось их узнать.Когда я создаю mp3-файл, он сохраняется в моем каталоге /storage/emulated/0.Когда я открываю mp3-файл в Firefox, продолжительность mp3-файла составляет всего 1 с, хотя должна быть 7 с.В чем может быть проблема?Я очень ценю каждую помощь, которую могу получить, вы можете увидеть мой код ниже.

 // The src of the mp3 file, works when I play it after in my local storage
     src = "recording.mp3";
      mediaRec = new Media(src, onSuccess, onError);

      // Record audio
      mediaRec.startRecord();

      // Stop recording after 7 sec
              mediaRec.stopRecord();

// get the file from the file system (local storage)
              window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
// Get the file from the file system

 function gotFS(fileSystem) {
      fileSystem.root.getFile("recording.mp3", null, gotFileEntry, fail);
 }  

 function gotFileEntry(fileEntry) {
     fileEntry.file(gotFile, fail);
 } 

 // the file is successfully retreived

 function gotFile(file){
   readDataUrl(file);
 }

 // turn the file into a base64 encoded string, and update the var base to this value.

 function readDataUrl(file) { 
     var reader = new FileReader();
     reader.onloadend = function(evt) {
    alert(evt.target.result);
    base = evt.target.result;
  };
   reader.readAsDataURL(file);
}

 // later when this is done I upload the file to something called parse. This seems to work fine, 

var file = new Parse.File("sound.mp3", { base64: base }); file.save().then(function() {
      Object.set("soundy", file);
   }, function(error) {
      alert("an error");
   // The file either could not be read, or could not be saved to Parse.
  });

Теперь файл успешно сохранен как mp3-файл в объекте анализа, но я не могу его воспроизвести.Я очень ценю каждую помощь, которую могу получить

Это было полезно?

Решение

возможно, ваша проблема в том, что чтение файла происходит асинхронно и файл не читается полностью, когда вы пытаетесь его загрузить?

Вы можете попытаться переместить код загрузки внутри функции обратного вызова в readDataUrl() (сразу после base = evt.target.result; линия)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top