Graag wil ik controleren of een geluidsbestand geladen is en klaar is om te gebruiken. Nu zegt men dat dit gedaan moet worden met de even listener 'canplaythrough'.
Nu is het probleem dat 'canplaythrough' ook wordt getriggered als je het geluidsbestand afspeelt (met .play()), en dit wil ik niet.
Is er nog een andere manier om te kijken of een geluidsbestand is geladen?
Alvast bedankt!
Edit:
Ik heb nu het volgende, en dit werkt opzich, alleen wordt de eventListener nu heel zelden nog uitgevoerd en ik heb geen flauw idee waar dit aan ligt, kan iemand helpen? Ik snap er niks van...
for (var i = this._soundDataList.length - 1; i >= 0; i--)
{
var sound = document.createElement('audio');
for (var j = this._soundDataList[i].extensions.length - 1; j >= 0; j--)
{
var source = document.createElement('source');
source.src = './client/assets/snd/' + this._soundDataList[i].name + '.' + this._soundDataList[i].extensions[j];
sound.appendChild(source);
}
sound.name = this._soundDataList[i].name;
var soundLoaded = function()
{
FRAMEWORK.Assets.addSound(this);
self._soundsLoaded++;
console.log(this);
this.removeEventListener('canplaythrough', soundLoaded, false);
};
sound.addEventListener('canplaythrough', soundLoaded, false);
}
Edit 2:
Het lijkt te werken als ik het audio element aan de body koppel en progress gebruik in plaats van canplaythrough, is dit een goede oplossing of kan dit voor problemen zorgen?
for (var i = this._soundDataList.length - 1; i >= 0; i--)
{
var sound = document.createElement('audio');
for (var j = this._soundDataList[i].extensions.length - 1; j >= 0; j--)
{
var source = document.createElement('source');
source.src = './client/assets/snd/' + this._soundDataList[i].name + '.' + this._soundDataList[i].extensions[j];
sound.appendChild(source);
}
sound.name = this._soundDataList[i].name;
var soundLoaded = function()
{
FRAMEWORK.Assets.addSound(this);
self._soundsLoaded++;
console.log(this);
};
sound.addEventListener('progress', soundLoaded, false);
document.body.appendChild(sound);
}