Pull to refresh

Проблемы с HTML5 <Audio>

Reading time 2 min
Views 6.3K
Когда на конференции 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.

Tags:
Hubs:
+31
Comments 17
Comments Comments 17

Articles