Представь: ты открыл браузерную «Змейку» в метро, нажал «старт» — и из динамика телефона громко зазвучала музыка. Вокруг огляделись, ты торопливо лезешь в настройки, чтобы отключить звук. Или другой вариант: игра работает идеально, но каждое нажатие на экран сопровождается дребезжанием вибромотора, и через две минуты хочется просто закрыть вкладку. Звук и тактильная отдача — мощные инструменты обратной связи, но в браузерных играх их легко сделать врагом игрока. Эта статья расскажет, как устроен звук в браузере, почему он не включается сам по себе, как работает вибрация на телефоне и зачем в любом случае добавлять кнопку mute.
Содержание
Web Audio API простыми словами
Когда в игре нужен звук, большинство новичков сначала думают про обычный аудиоплеер: загрузил файл, нажал «play». В HTML для этого есть тег <audio>, и для простых случаев его хватает. Но если звуков много, они должны накладываться друг на друга, менять громкость или скорость в зависимости от событий — <audio> быстро становится неудобным.
На смену ему приходит Web Audio API — встроенный в браузер инструмент для работы со звуком. Представь его как модульный синтезатор внутри вкладки. Есть источники звука — например, загруженные файлы или сгенерированные сигналы. Есть узлы обработки: громкость, панорама, фильтры, эффекты. И есть выход — динамики пользователя. Звук проходит по цепочке источник → узлы → выход, и на каждом этапе можно что-то подкрутить.
Для «Змейки» это удобно, потому что события идут быстро: поедание яблока, столкновение со стеной, нажатие кнопки поворота. Web Audio позволяет проигрывать короткие звуки одновременно, не дожидаясь окончания предыдущего. Можно сделать так, чтобы звук поедания становился выше по мере роста змейки, а финальный — отличался от обычного.
Важно понимать: Web Audio API работает только после того, как пользователь совершил действие на странице. Браузер не даст просто включить звук при загрузке игры. Это сделано специально — и об этом отдельно.
Почему звук не включается сам: autoplay-ограничения
Современные браузеры строго следят за автовоспроизведением звука. Если сайт пытается что-то включить без действия пользователя, звук заблокируется. В Chrome, Firefox, Safari и других браузерах действует политика autoplay: аудио может начаться только после клика, касания или нажатия клавиши.
У браузера есть внутренний «рейтинг доверия» к сайту. Если пользователь часто взаимодействует с игрой и включает звук, браузер может разрешить автовоспроизведение. Но для нового сайта звук точно не заиграет сам. Поэтому нельзя рассчитывать на фоновую музыку сразу после открытия вкладки.
Что это значит на практике:
- Первый звук должен запускаться после нажатия кнопки «Начать игру» или любого другого явного действия.
- Не стоит пытаться обмануть браузер, запуская звук через таймер или скрытый клик — это работает ненадёжно и раздражает пользователей.
- Если игрок отключил звук в предыдущей сессии, нужно уважать этот выбор и не включать его снова.
Хороший паттерн: при первом взаимодействии с игрой создавать аудиоконтекст и запускать фоновую музыку только если пользователь явно не отключил звук раньше. Состояние можно сохранить в localStorage — ту же технологию, что используется для рекорда в «Змейке».
Haptics: вибрация на телефоне
Haptics — это тактильная отдача, то есть ответ устройства через вибрацию. В браузерах для этого есть Vibration API: вызов navigator.vibrate(200) заставит телефон вибрировать 200 миллисекунд. Можно передать массив — тогда вибрация пульсирует с заданным ритмом, например navigator.vibrate([100, 50, 100]) означает: вибрировать 100 мс, пауза 50 мс, снова вибрировать 100 мс.
Вибрация хороша для усиления важных событий: столкновение в «Змейке», касание кнопки, достижение рекорда. Она добавляет ощущение физичности тому, что происходит на экране. Но есть три правила, которые стоит соблюдать:
- Не вибрируй при каждом действии. Если телефон дрожит при каждом повороте змейки, игра быстро утомляет.
- Делай вибрацию короткой. Достаточно 20–50 мс для лёгкой отдачи и 100–200 мс для сильного события. Длинные вибрации воспринимаются как ошибка или раздражитель.
- Учитывай, что не у всех устройств есть вибромотор. На десктопе Vibration API обычно не работает, поэтому вибрация — дополнение, а не замена звуку или визуальной обратной связи.
Ещё один нюанс: вибрация потребляет батарею. Частые длинные импульсы заметно сажают телефон. Поэтому в мобильных браузерных играх haptics применяют выборочно.
Кнопка mute: обязательный элемент интерфейса
Даже если ты продумал звук и вибрацию идеально, всегда найдётся ситуация, когда пользователю нужна тишина: он в офисе, в библиотеке, лежит рядом со спящим ребёнком или просто слушает музыку в наушниках. Кнопка отключения звука — не опция, а базовая вежливость к игроку.
Кнопка mute должна:
- быть видна с первого экрана, а не спрятана в глубине настроек;
- запоминать состояние между сессиями через
localStorage; - отключать одновременно и звук, и вибрацию — потому что вибрация тоже создаёт шум и раздражает в тихих местах;
- менять иконку в зависимости от состояния, чтобы игрок сразу понимал, включён звук или нет.
Идеально добавить кнопку mute прямо в интерфейс «Змейки» рядом с кнопкой «Пауза» или счётом. Если игрок один раз нажал «без звука», следующий заход в игру должен встретить его тем же состоянием.
Как применить это к «Змейке»: практический блок
Допустим, ты собираешься добавить звук и тактильную отдачу в свою версию игры. Вот минимальный план, который можно обсудить с ИИ-ассистентом:
Звуковые события
| Событие | Тип звука | Длительность | Громкость |
|---|---|---|---|
| Поворот змейки | Короткий щелчок | 50–100 мс | Низкая |
| Поедание яблока | Приятный тон, повышающийся по мере роста | 100–150 мс | Средняя |
| Столкновение | Низкий удар или «бум» | 200–300 мс | Средняя |
| Новый рекорд | Мелодия из 2–3 нот | 300–500 мс | Средняя |
Звуки лучше использовать короткие. Длинные эффекты мешают, если события идут часто. Для «Змейки» подойдут сгенерированные звуки прямо в Web Audio API — тогда не нужно тащить отдельные аудиофайлы.
Haptics
- Лёгкая вибрация 20 мс при поедании яблока.
- Двойная вибрация
[80, 40, 80]при столкновении. - Вибрацию отключать вместе со звуком по кнопке mute.
Autoplay
- Создавать аудиоконтекст только после первого клика или касания.
- Не запускать фоновую музыку автоматически.
- Если игрок ранее нажал mute, не создавать звук вообще до тех пор, пока он сам не включит его.
Mute
- Добавить иконку 🔊 / 🔇 в интерфейс.
- Сохранять состояние в
localStorage. - Применять mute ко всем звукам и вибрациям сразу.
Доступность
- Добавь в настройках возможность отключить не только звук, но и анимации. У некоторых людей звуковые эффекты или быстрая анимация вызывают дискомфорт.
- Не делай звук единственным способом понять, что произошло. Всегда дублируй событие визуально: яблоко исчезает, счёт меняется, змейка окрашивается при столкновении.
Заключение + чек-лист
Звук и haptics делают игру живой, но только когда они подчинены игроку, а не наоборот. Браузерные ограничения на autoplay существуют не для того, чтобы мешать разработчику, а чтобы защитить пользователя от назойливых сайтов. Хорошая игра уважает это: звук включается после явного действия, вибрация используется редко и коротко, а кнопка mute всегда под рукой.
Чек-лист «Звук и haptics не раздражают»
- Звук запускается только после первого действия пользователя.
- Есть кнопка mute, видимая на главном экране.
- Состояние mute сохраняется между сессиями.
- Вибрация короткая и привязана к важным событиям, а не к каждому касанию.
- Mute отключает и звук, и вибрацию.
- Звуковые эффекты короткие и не мешают частому геймплею.
- Важные события дублируются визуально, не только звуком.
- На десктопе игра остаётся играбельной без вибрации.
- В настройках есть возможность убрать анимации вместе со звуком.
Главная мысль: звук и тактильная отдача — как приправы. Их мало — блюдо пресное, их много — невозможно есть. В браузерной игре лучше сделать звук чуть тише, чем нужно, и дать игроку возможность быстро его убрать.
Читай дальше
Все статьиНе просто статьи — тебя доведут до результата
В практикуме за 1999 ₽ рядом живая команда практикующих разработчиков и маркетологов: ведём по шагам до твоего работающего приложения. Не «ролики и сам разбирайся» — помогаем на каждом затыке.
Перейти к практикуму