В HTML5 можно ли воспроизводить один и тот же звук более одного раза одновременно?
Я делаю игру, в которой часто играют звуки. Я заметил, что звук не будет воспроизводиться снова во время воспроизведения. Например, игрок сталкивается со стеной, «стук» Звук воспроизводится. Но если игрок сталкивается с одной стеной, а затем быстро сталкивается с другой стеной, то только один «удар» Звук воспроизводится, и я полагаю, что это происходит потому, что первый звук не закончился. Это правда? Как мне этого избежать? Я думал о предварительной загрузке звука три раза, всегда проигрывая другую копию этого звука, но это кажется довольно глупым ...
SOLVED:
Оказывается, я был прав ... Вам нужно предварительно загрузить несколько версий звука, а затем воспроизвести их по кругу.
THE CODE:
<code>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; } </code>