Звуковые эффекты в JavaScript / HTML5
Я использую HTML5 для программирования игр; препятствие, с которым я столкнулся сейчас, заключается в том, как играть звуковые эффекты.
Конкретные требования немногочисленны:
Играть и смешивать несколько звуков,Проиграть один и тот же семпл несколько раз, возможно, с перекрывающимся воспроизведением,Прервать воспроизведение сэмпла в любой точке,Предпочтительно воспроизводить файлы WAV, содержащие (низкокачественные) необработанные PCM, но я, конечно, могу их конвертировать.Мой первый подход состоял в том, чтобы использовать HTML5<audio>
элемент и определить все звуковые эффекты на моей странице. 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>
element - это скорее функция потоковой передачи, а не то, с чем можно играть звуковыми эффектами.
Есть ли какой-нибудь умный способ заставить это случиться, что я пропускаю, предпочтительно используя только HTML5 и JavaScript?
Я должен также упомянуть, что моей тестовой средой является Firefox 3.5 на Ubuntu 9.10. Другие браузеры, которые я пробовал - Opera, Midori, Chromium, Epiphany - дали разные результаты. Некоторые ничего не играют, а некоторые бросают исключения.