Les problèmes de préchargement audio en Javascript

Je suis en train de faire un cross-device/navigateur d'image et de son de préchargement pour un GameAPI je suis en train de travailler sur. Un fichier audio de précontrainte, et d'émettre un rappel une fois terminé.

Le problème est que l'audio ne sera pas commencer à charger sur la lenteur de chargement de la page, mais l'habitude de travailler sur le deuxième essai, probablement parce qu'il cache et il sait qu'il existe.

J'ai rétréci vers le bas à l'audio.fonction load (). Se débarrasser d'elle résout le problème, mais il est intéressant de noter, mon motorola droid besoins de la fonction.

Quelles sont les expériences que vous avez eues avec HTML5 audio préchargement?

Voici mon code. Oui, je sais que le chargement des images dans une fonction distincte pourrait provoquer une condition de concurrence 🙂

var resourcesLoading = 0;
function loadImage(imgSrc) {
//alert("Starting to load an image");
resourcesLoading++;
var image = new Image();
image.src = imgSrc;
image.onload = function() {
//CODE GOES HERE
//alert("A image has been loaded");
resourcesLoading--;
onResourceLoad();
}
}
function loadSound(soundSrc) {
//alert("Starting to load a sound");
resourcesLoading++;
var loaded = false;
//var soundFile = document.createElement("audio");
var soundFile = document.createElement("audio");
console.log(soundFile);
soundFile.autoplay = false;
soundFile.preload = false;
var src = document.createElement("source");
src.src = soundSrc + ".mp3";
soundFile.appendChild(src);
function onLoad() {
loaded = true;
soundFile.removeEventListener("canplaythrough", onLoad, true);
soundFile.removeEventListener("error", onError, true);
//CODE GOES HERE
//alert("A sound has been loaded");
resourcesLoading--;
onResourceLoad();
}
//Attempt to reload the resource 5 times
var retrys = 4;
function onError(e) {
retrys--;
if(retrys > 0) {
soundFile.load();
} else {
loaded = true;
soundFile.removeEventListener("canplaythrough", onLoad, true);
soundFile.removeEventListener("error", onError, true);
alert("A sound has failed to loaded");
resourcesLoading--;
onResourceLoad();
}
}
soundFile.addEventListener("canplaythrough", onLoad, true);
soundFile.addEventListener("error", onError, true);
}
function onResourceLoad() {
if(resourcesLoading == 0)
onLoaded();
}

Il est difficile de diagnostiquer le problème, car il n'indique aucune erreur et seulement échoue de temps en temps.

  • C'est une chienne, mais j'ai réussi à faux, il en vient de charger audio standard AJAX texte demandes. Je sais que cela semble stupide, mais une fois que les données en cache, il est mis en cache et BOOM: préchargé audio. Il y a des questions où les navigateurs ne les chargez pas plus d'un flux de données multimédia, j'ai eu le même problème avec la vidéo, je viens de charger les vignettes et des créé le lecteur HTML5 à la volée. Je trouve que faire semblant que l'AJAX astuces le navigateur en pense que c'est pas les médias.
  • Intéressant, je vais essayer ça.