javascript - tutorial - Meteor DOMception: no se pueden decodificar datos de audio
meteor ventajas y desventajas (2)
EDITAR: Acabo de crear un nuevo Meteor Project y funcionó: D wow. Pero todavía no funciona en mi proyecto principal ... parece que tengo diferentes configuraciones.
En mi proyecto Meteor.js tengo 4 archivos .mp3
ubicados en public/sounds/xyz.mp3
. Yo cargo estos .mp3
con:
let soundRequest = new XMLHttpRequest();
soundRequest.open(''GET'', this._soundPath, true);
soundRequest.responseType = ''arraybuffer'';
let $this = this;
soundRequest.onload = function () {
Core.getAudioContext().decodeAudioData(soundRequest.response, function (buffer) {
$this.source.buffer = buffer;
$this.source.loop = true;
$this.source.connect($this.panner);
});
};
soundRequest.send();
Esto FUNCIONA en google Chrome
, pero cuando construyo la aplicación a través de meteor run android-device
, DOMException: Unable to decode audio data
el siguiente mensaje de error: DOMException: Unable to decode audio data
Me pregunto si esto es un error porque cargar .png
o .jpg
funciona bien en la versión móvil. No he instalado ningún paquete al lado de meteor add crosswalk
pero desinstalar esto tampoco ayuda.
Esta API web no es compatible con dispositivos Android, pero funciona en el navegador Chrome de Android
Verifique la especificación del navegador en este enlace https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/decodeAudioData
No debería necesitar hacer una solicitud http para obtener un recurso local. Puede referirse a una url local. En el dispositivo Android, la ruta es diferente. Vea este código:
function getSound(file) {
var sound = "/sounds/"+file;
if (Meteor.isCordova) {
var s;
if (device.platform.toLowerCase() === "android") {
sfile = cordova.file.applicationDirectory.replace(''file://'', '''') + ''www/application/app'' + sound;
}
else {
sfile = cordova.file.applicationDirectory.replace(''file://'', '''') + sound;
}
var s = new Media(
sfile,
function (success) {
console.log("Got sound "+file+" ok ("+sfile+")");
s.play();
},
function (err) {
console.log("Get sound "+file+" ("+sfile+") failed: "+err);
}
);
} else {
var a = new Audio(sound);
a.play();
}
}
En un dispositivo, carga el archivo de sonido de forma asíncrona y luego lo reproduce. En el navegador solo carga y juega sincrónicamente.