Адаптивная музыка на примере FMOD

Сегодня мы разберем, на небольшом примере в FMOD, как устроена адаптивная музыка в играх.

Теория

Для начала, как это обычно бывает, немного теории. Как мы знаем любая музыкальная композиция являет собой абсолютно линейное произведение, в котором все события заранее спланированы автором и случаются в определенное время с определенной целью.

Такой формат отлично подходит для сопровождения других линейных произведений, будь то кино или театральная постановка, где все события также случаются в определенное время.

Но в случае с играми, а они у нас нелинейны, такой подход работать не будет. Невозможно предугадать в какой момент времени в игре произойдет то или иное событие (и произойдет ли вообще?). Для решения этой задачи и была придумана концепция адаптивной музыки.

Как нам снова подсказывает русская википедия адаптивная музыка это…

В общем, мы лучше обратимся к английской википедии.

Ноги у адаптивной музыки растут аж с 1981 года — во Frogger музыка резко менялась, когда игрок достигал безопасной точки. Со временем, адаптивная музыка становилась все сложнее и были сформированы основные методы — «горизонтальный» и «вертикальный».

«Горизонтальный» метод заключается в переключении между заранее подготовленными музыкальными сегментами в зависимости от игровой ситуации. Классический пример — пока игрок бродит по локации играет спокойная музыка, но как только он вступает в бой, включается «боевой» сегмент.

«Вертикальный» метод заключается в «переоркестровке» на лету — включении/отключении партий инструментов в зависимости от игровой ситуации. Например вы хотите менять музыку в зависимости от количества врагов с которыми сражается игрок — пока врагов нет, тихонько играет перкуссия, потом подключаются бас и барабаны, а когда врагов становится достаточно много мы слышим полный микс.

У обоих методов есть свои достоинства и недостатки, поэтому чаще всего используется их комбинация. Ее мы и будем использовать в нашем примере.

Процесс создания адаптивной музыки можно условно поделить на три этапа — планирование, написание музыки и имплементация. Итак, этап первый.

Планирование

Предположим у нас есть схема уровня — катсцена -> первая локация -> вторая локация -> третья локация. Здесь идеально подойдет «горизонтальный» метод — нам нужно создать 3 музыкальных сегмента и переключать их при смене локаций. Катсцену за сегмент не считаем, так как она проигрывается только один раз в начале.

Также у нас на уровне есть враги и мы хотим менять музыку в зависимости от их количества. Здесь используем «вертикальный» метод — пока врагов нет играет минималистичный эмбиент, а потом постепенно подключаются новые инструменты.

В рамках данной статьи я решил сделать только два изменяемых параметра — локацию и количество врагов — так проще для понимания. Но на деле с помощью «вертикального» метода можно делать очень сложные саундтреки, реагирующие на десятки параметров.

Написание музыки

В целом процесс написания адаптивной музыки точно такой же как и любой другой за исключением некоторых тонкостей.

Для начала нам нужно определиться как у нас будут осуществляться переходы между сегментами. Можно использовать обычные кроссфейды или квантизацию (о ней чуть позже). Мы выберем второй вариант, благо в FMOD она есть.

При написании адаптивной музыки нам нужно придерживаться нескольких простых правил.

Во-первых, по возможности избегать ходов, когда инструмент начинает играть «из-за такта», т.е. вступать немного раньше своего сегмента. Иначе может получится ситуация, когда инструмент вступил в конце первого сегмента, а во втором его партии нет и он просто обрывается «на полуслове».

Во-вторых, используя обработки следует помнить о «хвостах» инструментов, особенно длинных дилеях и реверберации — мы будем экспортировать лупы определенной длины и все лишнее будет обрубаться.

В-третьих, старайтесь создавать различные варианты одного и того же сегмента. Нет ничего хуже, чем статичный луп, который несколько минут играет без каких-либо изменений.

В-четвертых, экспортируйте ваш трек максимально возможным количеством отдельных дорожек. Да, собирать его будет намного дольше, но если вам позже понадобится что-то изменить, у вас будет такая возможность.

Эти правила, как и любые другие в музыке, можно смело нарушать, если того требует ситуация и вы знаете что делаете.

Имплементация

Вот мы и добрались до FMOD. На данном этапе у нас есть хитрый план и целая гора аудиофайлов (в нашем случае 33).

Первым делом создаем, и соответствующее называем, аудио дорожки для каждого трека и закидываем туда наши аудиофайлы.

Первую лепту в интерактивность нашего трека внесет Его Величество Рандом.

В FMOD, помимо всего прочего, существует такая штука как Multi Instrument. Его отличие от обычного Single Instrument в том, что в него можно загрузить несколько аудиофайлов и каждый раз будет проигрываться случайно выбранный аудиофайл. Это хорошо подходит для создания разнообразия в рамках одного музыкального сегмента.

Теперь, когда все дорожки наполнены, нам нужно создать логическую структуру нашего трека. Сейчас пройдемся по каждому пункту отдельно.

  1. Указываем музыкальный размер и темп — это нужно для корректной работы квантизации
  2. Создаем зацикленные области, каждая из которой будет отвечать за свой музыкальный сегмент
  3. Создаем маркеры перехода для каждого сегмента
  4. Создаем области перехода, которые привязаны к определенным маркерам

Пустая область в начале отведена под катсцену, там будет проигрываться линейный сегмент музыки.

Для того, чтобы области перехода корректно работали мы должны сообщать движку, когда менять сегменты, иначе они будут переключаться хаотично. Для этого создадим параметр Phase с диапазоном от 1 до 3, по числу локаций.

Настройка области перехода на вторую локацию

В настройках области перехода указываем, что срабатывать она должна, когда параметр Phase равен от 2 до 2,9 (такой широкий диапазон нужен для избежания ошибок). А заодно указываем интервал квантизации в 4 такта (1 квадрат) — теперь переход не будет внезапным — после того как FMOD получит команду на смену сегмента он сначала доиграет до конца текущий сегмент и только потом переключится. Собственно для этого квантизация и нужна.

После настройки остальных областей «горизонтальную» составляющую нашего трека можно считать законченной. Теперь мы можем перемещаться из одного сегмента в другой абсолютно бесшовно. Осталось настроить трек по вертикали.

Для включения/отключения инструментов мы воспользуемся банальной автоматизацией громкости. Для этого создаем еще один параметр, у нас это будет Parameter 1, и устанавливаем диапазон значений от 1 до 10.

А потом рисуем нашу любимую автоматизацию для каждого инструмента.

По сути в любой момент времени все инструменты играют, они активны, разница лишь в уровне громкости.

На выходе мы получим нечто такое.

Снова извиняюсь за звук в моно, наши специалисты работают над этим.

Данный пример очень простой и, чтобы не растягивать статью, я сознательно опустил некоторые моменты, как технические, так и музыкальные. Может быть в следующий раз расскажу про использование MIDI, Pure Data и прочие хитрые технологии.

P.S. Для любопытных — проект со всеми звуками лежит здесь.

 
Источник: DTF

Читайте также