Подтвердить что ты не робот

Как Scirra получил звук HTML5 настолько совершенным в Construct 2?

Просмотрите эту демонстрацию космического шутера.

Звук HTML5 идеально подходит для Chrome 18 и Firefox 10. В играх нет лаги, и каждый образец воспроизводится идеально. В последний раз, когда я пытался воспроизводить звуки с использованием HTML5 audio и JavaScript, я не мог слышать звук, который можно было сыграть несколько раз.

Какое волшебство делает Сцирра, чтобы сделать это настолько совершенным?

4b9b3361

Ответ 1

Я разработчик Construct 2, поэтому надеюсь, что я достаточно компетентен, чтобы ответить на ваш вопрос:)

Звук HTML5 действительно беспорядок, поэтому я пошел на значительную длину, чтобы попытаться сделать его пуленепробиваемым в Construct 2. Вот схема того, что я сделал:

Использовать API веб-аудио

Звук HTML5 создается для потоковой передачи музыки, поэтому объект HTML5 Audio является чем-то вроде тяжеловесного объекта. Воспроизведение 10 звуков в секунду с ним, как Space Blaster, позволяет легко захватывать браузер. С другой стороны, Web Audio API - это высокопроизводительный звуковой движок с маршрутизацией, эффектами и легким воспроизведением звука. Это идеально подходит для игр. Звуковые буферы и воспроизведение звука разделены, поэтому вы можете иметь один буфер данных и эффективно воспроизводить его много раз одновременно, тогда как некоторые браузеры настолько ошибочны, если вы воспроизводите звук HTML5 несколько раз, когда он повторно загружает его каждый раз! Так как он был разработан для игр и т.д., Вы можете с удовольствием воспроизвести тонны звука на века, и он все равно будет гудеть. Он также может использовать звук HTML5 в качестве источника звука, хотя я использую только аудио HTML5 для вещей, которые пользователь обозначил как музыкальные треки (с тех пор, когда вы предпочитаете потоковое вещание - обычно все остальное в API веб-аудио полностью загружается до играть).

API веб-аудио поддерживается в Chrome, он также подключился к iOS 6+ (хотя он отключен, пока вы не попытаетесь воспроизвести какой-то звук в событии с сенсорным экраном), Firefox работает над поддержкой, и он должен скоро появиться для Chrome для Android. Таким образом, на этих платформах звук будет значительно более надежным.

Дополнительная информация о HTML5Rocks и предлагаемой спецификации - вам придется использовать спецификацию как документация на данный момент, там не так много.

Другие браузеры: внедрение системы утилизации аудио

API веб-аудио еще не поддерживается повсеместно, особенно IE, а это значит, что вам все равно нужно ломать HTML5-аудио в то, что может работать для игр для обратной совместимости. Способ сделать это состоит в утилизации аудио объектов.

Лазер игрока в Space Blaster срабатывает 10 раз в секунду - и это не включает никаких других звуковых эффектов! Как я уже упоминал ранее, Audio - это супертяжелый объект, поэтому, если вы делаете new Audio() 10+ раз в секунду, вот и вот, браузер в конце концов умирает, и звук начинает сжиматься. Тем не менее, вы можете резко уменьшить количество аудио объектов, созданных путем их переработки.

В принципе, для каждого звукового эффекта храните кеш каждого аудиообъекта, который вы создали, с этим звуком в качестве источника. Затем, при воспроизведении нового звука, выполните поиск в кеше для любых звуковых эффектов, которые закончили воспроизведение (свойство ended будет истинным). Если вы найдете его, перемотайте его обратно в начало (currentTime = 0) и play() снова. В противном случае создайте объект new Audio() в кеше.

Так как звуковой эффект лазера игрока короткий, вместо того, чтобы создавать 600 аудио-объектов в минуту, будет только 3 или 4, чтобы он продолжал крутиться вокруг. Некоторые браузеры, к сожалению, все равно будут загружать его 4 раза (Safari сделал это последнее, что я проверил!) Или имеют высокую задержку при первом воспроизведении каждого звукового буфера, но в конечном итоге браузер наступает, поскольку одни и те же буферы всегда используются повторно. Так что в основном звук может быть немного странным в течение нескольких мгновений, тогда он проясняется. Мы также используем кеш файл HTML5, поэтому в следующий раз, когда вы загружаете все нагрузки с диска, последующие игры должны выполняться сразу же.

Это в основном это. Он по-прежнему немного изворотлив в первой игре с аудио HTML5, но каждый раз после этого должен быть достаточно прочным, если браузер имеет разумную реализацию звука. Есть несколько способов попытаться клонировать объекты Audio, но я обнаружил, что перемотка существующих аудиостанций лучше всего работает.

Там нет SoundManager или любых резервных копий на основе Flash/плагинов, поскольку мы делаем точку чистым HTML5.

Мы также поддерживаем аудио API, предоставляемые PhoneGap и appMobi для мобильных устройств, поскольку HTML5-звук на мобильном телефоне даже не стоит пытаться. Это составляет в общей сложности четыре аудио API, которые облегает аудио-движок, и да, это похоже на беспорядок в frankenstein, но он работает.

Что это. Я полагаю, что наши конкуренты прочтут это, но кто волнуется, когда там будет SO rep?!!! 1111