Когда на конференции Google I/O показали Angry Birds на HTML5, в потоке радости мало кто обратил внимание, что игра на самом деле требует наличия Flash. Спрашивается, почему? Ведь игра написана на Google Web Toolkit (GWT) и для обработки звука использует библиотеку GWT-voices.

Появились размышления, что таким образом разработчик постарался блокировать игру для пользователей iOS (они покупают её за деньги в App Store). Из лагеря Microsoft высказались в том смысле, что Google умышленно оптимизировал игру под свой «глючный» и «нестандартный» Chrome, тогда как IE гораздо лучше поддерживает <Audio> и не экспериментирует с функциями, которые ещё не утверждены.

На самом деле причины немного другие, и главная из них в том, что HTML5 <Audio> пока что не подходит для использования в играх или профессиональных аудиоприложениях.

Разработчик Рей Кромвелл, который год назад портировал Quake2 на HTML5 (GwtQuake), называет два главных недостатка HTML5 <Audio>

Во-первых, в нынешнем виде функционал HTML5 не даёт браузеру прямого доступа к аудиоданным, так что невозможно синтезировать звук на лету, получать и обрабатывать сэмплы, накладывать дополнительные эффекты или даже нормально работать со стерео.

Во-вторых, HTML5 не обеспечивает необходимого контроля над таймингом, а ведь он очень важен для восприятия — человеческое ухо реагирует на задержку звука даже в несколько миллисекунд. Здесь же практически невозможно запустить аудио в ту миллисекунду, когда это требуется. На практике в разработке игр считается нормальной задержка не более 7 мс. Однако, в HTML5 вы можете назначать звуки только командами setInterval или setTimeout, и это слишком ненадёжно: точный тайминг не гарантируется, могут быть задержки до 16 мс, а при интенсивном использовании этих команд браузер начинает тормозить. Если вы переключ��етесь на другую вкладку, то браузер может сильно замедлить скрипт, чтобы снизить нагрузку на CPU, ведь здесь нет функции «requestSoundEvent», аналогичной requestAnimationFrame.

Вот почему мы с нетерпением ждём Web Audio API, чтобы снять значительную часть нагрузки с центрального процессора и обеспечить приемлемый тайминг. И скоро дождёмся. Вот соответствующий фрагмент видео с презентации Google I/O.