Подтвердить что ты не робот

Почему я не могу воспроизводить звуки более одного раза с помощью тега HTML5?

Вот как звук "сохраняется":

<audio id = "hammer" src="res/sounds/Building/hammer.wav"></audio>

В реальной игре (для которой я использую звуки) я использую ее для воспроизведения звука:

   function playSound(soundid)
   {
        document.getElementById(soundid).currentTime = 0;
        document.getElementById(soundid).play();
   }

Но звук воспроизводится только в первый раз, и больше никогда! Я попытался сбросить "currentTime" в консоли на 0, но я буквально получаю следующее:

>document.getElementById("hammer").currentTime = 0
0
>document.getElementById("hammer").currentTime
0.340...

Почему это происходит, как его исправить?

4b9b3361

Ответ 1

Смотрите этот слайд и предыдущие три слайда Эван Уоллес и Джастин Ардини на html5 игровом устройстве.

Для всех ресурсов, чтобы сделать несколько удивительных игр, часть их разговоров: http://madebyevan.com/gamedevclass/

Аудио по-прежнему не работает последовательно во всех браузерах, на данный момент:

  • Элемент должен быть перезагружен в Chrome или он будет воспроизводиться только один раз
  • Элемент не должен перезагружаться в Firefox или будет задержка
function playSoundEvent() {
  if (window.chrome) elems[index].load()
  elems[index].play()
  index = (index + 1) % elems.length
}

Ответ 2

У меня недавно была проблема с html5. Работали везде, кроме сафари. Использование load() перед вызовом play() решило эту проблему. Это также помогает убедиться, что звуковые эффекты не перекрываются с тяжелыми кликерами, когда обработчики событий запускают звуки.

Here what I used
<audio id="sound-one" preload="auto">
    <source src="http://myurl/foo.mp3"></source>
    <source src="http://myurl/foo.ogg"></source>
</audio>


<a href="#" id="navigation-id">click here</a>  



Jquery
$("#navigation-id") //this attached is to an element on the page
.mouseover(function() {
    sound-one.load();                               
    sound-one.play();
    });

Ответ 3

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

Я настоятельно рекомендую потратить время, чтобы изучить API WebAudio.

Ответ 4

Несколько месяцев назад я столкнулся с той же проблемой при разработке фортепиано в HTML5. Когда клавиша была нажата снова и снова, мне пришлось остановиться, перемотать и воспроизвести звук при каждом нажатии клавиши. Я использовал тот же код, написанный в этом вопросе, который работал в Firefox и Safari, но не в Chrome. В Chrome он снова не играл. Наконец, мне пришлось изменить код, чтобы он работал. Добавлен один прослушиватель для события onseeked, затем установите currentTime = 0 и в обработчике события вызывается play. Это сработало для меня. Точно так же мне пришлось ждать события одного действия, прежде чем делать следующее действие во многих местах. Это была старая версия Chrome. Позже я узнал, что даже некоторые версии браузеров поддерживают аудио, способ поддержки каждого из них несколько отличается. Это отличие не будет видно, если мы просто поместим звуковой тег и воспроизведем звук, но будем испытывать, когда мы попытаемся управлять аудио с помощью Javascript. В любом случае, все это касается более старых версий браузеров, что намного лучше во всех последних версиях. Поэтому, пожалуйста, проверьте последнюю версию Chrome (даже мой пианино работал в Chrome 10 без изменения кода), и в отношении аудиоформата я предлагаю вам хранить файлы MP3 и OGG вашего аудио, а не один файл wav.