Я використовую HTML5 для програмування ігор; перешкодою, з якою я стикався зараз, є те, як відтворювати звукові ефекти.
Конкретні вимоги малочисельні:
- Відтворюйте та змішуйте кілька звуків,
- Відтворити один і той же зразок кілька разів, можливо, перекриваючи відтворення,
- Перервати відтворення зразка в будь-якій точці,
- Переважно відтворюйте файли WAV, що містять (низькоякісний) необроблений ПКМ, але я, звичайно, можу конвертувати їх.
Першим моїм підходом було використання <audio>
елемента HTML5 та визначення всіх звукових ефектів на моїй сторінці. Firefox відтворює файли WAV просто персиково, але виклик #play
декілька разів насправді не відтворює зразок кілька разів. З мого розуміння специфікації HTML5, <audio>
елемент також відстежує стан відтворення, так що це пояснює, чому.
Моя безпосередня думка полягала в тому, щоб клонувати аудіоелементи, тому я створив наступну крихітну бібліотеку JavaScript, щоб зробити це для мене (залежить від jQuery):
var Snd = {
init: function() {
$("audio").each(function() {
var src = this.getAttribute('src');
if (src.substring(0, 4) !== "snd/") { return; }
// Cut out the basename (strip directory and extension)
var name = src.substring(4, src.length - 4);
// Create the helper function, which clones the audio object and plays it
var Constructor = function() {};
Constructor.prototype = this;
Snd[name] = function() {
var clone = new Constructor();
clone.play();
// Return the cloned element, so the caller can interrupt the sound effect
return clone;
};
});
}
};
Тож тепер я можу робити Snd.boom();
з консолі Firebug і грати snd/boom.wav
, але все одно не можу відтворювати один і той же зразок кілька разів. Здається, що <audio>
елемент справді швидше є функцією потокової передачі, а не чимось, з чим грати звукові ефекти.
Чи є розумний спосіб зробити так, що мені не вистачає, бажано використовувати лише HTML5 та JavaScript?
Я також повинен зазначити, що моє тестове середовище - це Firefox 3.5 на Ubuntu 9.10. Інші браузери, які я спробував - Opera, Midori, Chromium, Epiphany - дали різні результати. Деякі нічого не грають, а деякі кидають винятки.