Почему я не могу воспроизводить звуки более одного раза, используя звуковую метку HTML5? - PullRequest
25 голосов
/ 05 января 2012

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

<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...

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

Ответы [ 4 ]

24 голосов
/ 22 января 2012

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

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

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

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

У меня недавно была эта проблема с 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();
    });
1 голос
/ 15 мая 2015

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

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

0 голосов
/ 05 января 2012

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

...