Estoy haciendo un juego, en el que a menudo se reproducen sonidos. Noté que un sonido no se reproducirá mientras se está reproduciendo. Por ejemplo, el jugador colisiona con una pared, se reproduce un sonido "golpe". Pero, si el jugador colisiona con una pared y luego colisiona rápidamente con otra pared, solo se reproduce un sonido "thump", y creo que esto sucede porque el primer sonido no finalizó. ¿Es eso cierto? ¿Cómo debo evitar esto? Pensé en la precarga del sonido tres veces, siempre jugando una copia diferente de ese sonido, pero esto parece bastante estúpida ...En HTML5, ¿puedo reproducir el mismo sonido más de una vez al mismo tiempo?
resuelto:
resulta que estaba bien ... Usted necesito para precargar múltiples versiones del sonido y luego tocarlas circularmente.
el código:
var ns = 3; //The number of sounds to preload. This depends on how often the sounds need to be played, but if too big it will probably cause lond loading times.
var sounds = []; //This will be a matrix of all the sounds
for (i = 0; i < ns; i ++) //We need to have ns different copies of each sound, hence:
sounds.push([]);
for (i = 0; i < soundSources.length; i ++)
for (j = 0; j < ns; j ++)
sounds[j].push(new Audio(sources[i])); //Assuming that you hold your sound sauces in a "sources" array, for example ["bla.wav", "smile.dog" "scream.wav"]
var playing = []; //This will be our play index, so we know which version has been played the last.
for (i = 0; i < soundSources.length; i ++)
playing[i] = 0;
playSound = function(id, vol) //id in the sounds[i] array., vol is a real number in the [0, 1] interval
{
if (vol <= 1 && vol >= 0)
sounds[playing[id]][id].volume = vol;
else
sounds[playing[id]][id].volume = 1;
sounds[playing[id]][id].play();
++ playing[id]; //Each time a sound is played, increment this so the next time that sound needs to be played, we play a different version of it,
if (playing[id] >= ns)
playing[id] = 0;
}
¿Qué estás usando para escuchar el audio? Supongo que es la etiqueta '
'sound = new Audio (" souce.wav "); sound.play(); ' – corazza