Вопрос по html5, audio, javascript, html5-audio – В HTML5 можно ли воспроизводить один и тот же звук более одного раза одновременно?

8

Я делаю игру, в которой часто играют звуки. Я заметил, что звук не будет воспроизводиться снова во время воспроизведения. Например, игрок сталкивается со стеной, «стук» Звук воспроизводится. Но если игрок сталкивается с одной стеной, а затем быстро сталкивается с другой стеной, то только один «удар» Звук воспроизводится, и я полагаю, что это происходит потому, что первый звук не закончился. Это правда? Как мне этого избежать? Я думал о предварительной загрузке звука три раза, всегда проигрывая другую копию этого звука, но это кажется довольно глупым ...

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>
Что вы используете для воспроизведения аудио? Я предполагаю, что это<audio> тег. Anish Gupta
sound = new Audio("souce.wav"); sound.play(); corazza

Ваш Ответ

4   ответа
4

можете ли вы воспроизводить их более одного раза одновременно, но вот как вы можете воспроизводить звук более одного раза, не загружая его более одного раза.

var sound = document.getElementById("incomingMessageSound")
var sound2 = sound.cloneNode()
sound.play()
sound2.play()

Я знаю, что это работает для Chrome, единственное место, где мне это было нужно. Удачи!

Так как я создал аудио тег с тегом источника в детстве (<audio><source src="sound.mp3"/></audio>), Мне нужно было установить дополнительныйdeep парам кtrue (sound.cloneNode(true)) для того, чтобы метод play работал на клонированном узле.
0

в будущем вам следует использоватьWebAudio API, которая специально разработана для игр и аудио приложений в браузере.

Там вы можете воспроизвести любой звук несколько раз и сделать с ним несколько других забавных вещей.

Хороший урок для этого здесь:http://www.html5rocks.com/en/tutorials/webaudio/games/

2

чтобы имитировать полифонию. Играйте в них в круговой манере. Проверьте мою демонстрацию вmatthewtoledo.com, В частности, функция _initSoundBank ()

Ах да, это работает! Будет тост код ... corazza
Так в принципе я был прав? corazza
Ага. Это лучший способ, который я нашел. Если у кого-то есть лучшее решение, я бы очень хотел знать.
1

<audio> Объект может воспроизводить только одну дорожку за раз. Считайте, что<audio> объект имеетcurrentTime атрибут, который указывает текущую позицию звуковой дорожки: если<audio> объект может воспроизводить несколько треков один раз, какое значение будетcurrentTime отражают?

Смотрите мое решение для расширенного набора этой проблемы наТяжело ли играть звук в исполнении Javascript?, (В основном, добавьте дубликат<audio> теги с одинаковым звуком.)

Ага! Я знал, что кто-то вложил эту идею в мою голову раньше ... Спасибо;) corazza

Похожие вопросы