Pregunta

Estoy intentando cargar un archivo de audio capturado utilizando la API de archivos de Phonegap.Grabo el archivo de audio como un archivo mp3, luego localizo el archivo en el sistema de archivos y luego lo subo a un servidor.La grabación del archivo funciona bien y puedo reproducirlo en mi almacenamiento local.La carga del archivo también parece funcionar bien, pero no puedo reproducir el archivo mp3 cuando lo cargo.Entonces lo que estoy preguntando;¿Cuál es la ruta correcta al archivo grabado que intento cargar? ¿Obtengo la cadena codificada en base64 correcta del archivo multimedia o estoy creando un archivo nuevo ya que mi dispositivo no puede encontrar el archivo que estoy buscando?Por el momento estoy trabajando con Android, pero si hay alguna peculiaridad de iOS, me gustaría conocerla también.Cuando creo el archivo mp3, se almacena en mi directorio /storage/emulated/0.Cuando abro el archivo mp3 en Firefox, la duración del archivo mp3 es de solo 1 segundo, cuando debería ser de 7 segundos.¿Cual podría ser el problema?Realmente aprecio cada ayuda que pueda recibir, puedes ver mi código a continuación.

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

El archivo ahora se guardó correctamente como un archivo mp3 en un objeto de análisis, pero no puedo reproducirlo.Realmente aprecio cada ayuda que pueda obtener.

¿Fue útil?

Solución

¿Quizás su problema es que la lectura del archivo es asincrónica y el archivo no se lee por completo cuando intenta cargarlo?

Podrías intentar mover tu código uload dentro de la función de devolución de llamada en readDataUrl() (justo después del base = evt.target.result; línea)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top