Система звука
Ну чтож, передохнул – пора возвращаться к работе над звуковой системой. Для работы со звуком в браузерах существует Web Audio API. Апи, как оказалось, уже из коробки умеет многое: есть пространственный звук, фильтры и опция выноса звука в отдельный воркер. Похоже, даже изобретать ничего не придется – достаточно написать удобный фасад, чтобы интегрировать звук в движок и редактор.
Начал с самого простого: воспроизведения звуков, привязанных к акторам в качестве компонентов. Звук можно запускать через отправку событий или автоматически при загрузке уровня. Пока без позиционирования и эффектов – звуки проигрываются как есть.
Работа с Web Audio API сводится к составлению графа, где узлы – это источники звука, эффекты (например, фильтрация или изменения громкости) и выходной узел куда подается итоговый микс. Все довольно удобно и логично. Документация на MDN подробная, есть примеры на GitHub. Огорчает разве что отсутствие отладочных инструментов на уровне браузеров. В Chrome они доступны только в виде расширений, а в Firefox вкладка в дев тулзах для отладки когда-то была, но, похоже ее уже убрали. Из-за этого я испытываю некоторую тревогу: справляется ли сборщик мусора с отработанными звуками или нет.
Собрал небольшую демку на базе последней игры, которой я занимался. Поскольку в работе с аудио я полный профан, было довольно тяжело подобрать подходящие звуки, особенно музыку. В итоге трек сгенерировал через Suno AI, а остальные звуки взял с freesound.org. Поэтому впервые на канале видос к посту со звуком. Предыдущие видео, где я случайно забыл отключить запись микрофона и дышал в него пока делал запись экрана – не в счет.
Пока я прокрастинировал работу над движком и устанавливал все игры, незаметно подкралась дата апрельского Ludum Dare. Планирую участвовать и, возможно, даже успею довести звук до рабочего состояния, чтобы использовать его на джеме.