Почему я не могу воспроизводить звуки более одного раза с помощью тега 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...
Почему это происходит, как его исправить?
Ответы
Ответ 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.