Я разработчик Construct 2, так что я надеюсь, что я достаточно квалифицирован, чтобы ответить на ваш вопрос :)
HTML5 аудио действительно беспорядок, поэтому я пошел на многое, чтобы попытаться сделать он пуленепробиваемый в Construct 2. Вот набросок того, что я сделал:
Используйте Web Audio API
HTML5 аудио появляются предназначенным для прослушивания музыки, так что объект HTML5 Audio является своим родом супертяжелого объекта , Воспроизведение 10 звуков в секунду с ним, как Space Blaster, позволяет легко захватывать браузер. С другой стороны, Web Audio API - это высокопроизводительный звуковой движок с маршрутизацией, эффектами и легким воспроизведением звука. Это идеально подходит для игр. Звуковые буферы и воспроизведение звука разделены, поэтому вы можете иметь один буфер данных и эффективно воспроизводить его много раз одновременно, тогда как некоторые браузеры настолько ошибочны, если вы воспроизводите звук HTML5 несколько раз, когда он повторно загружает его каждый раз! Так как он был разработан для игр и т. Д., Вы можете с удовольствием воспроизвести тонны звука на века, и он все равно будет гудеть. Он также может использовать звук HTML5 в качестве источника звука, хотя я использую только аудио HTML5 для вещей, которые пользователь обозначил как музыкальные треки (так как именно там вы предпочитаете потоковое вещание - обычно все остальное в API веб-аудио полностью загружается до играть).
API веб-аудио поддерживается в Chrome, а также подключен к iOS 6+ (хотя он отключен, пока вы не попытаетесь воспроизвести какой-то звук в событии с сенсорным экраном), Firefox работает над поддержкой, и он должен появиться скоро Chrome для Android. Таким образом, на этих платформах звук будет значительно более надежным.
Дополнительная информация о HTML5Rocks и the proposed spec - вам придется использовать спецификацию в качестве документации на данный момент, там не так много.
Другие браузеры: осуществлять аудио системы утилизации
Веб-Audio 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
Том здесь из Сцирры, я посмотрю, смогу ли я заставить Эшли ответить на это за вас в ближайшее время! –