Найти в Дзене
Игровой движок Godot engine

№16. Работа со звуком. Общая информация.

Оглавление

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

После добавления звукового файла в ресурсы , мы сразу можем проводить некоторые манипуляции.
(я использовал файл в формате WAV. Настройки импорта могут варьироваться в зависимости от формата):

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

Звук проигрывается в годо при помощи ноды AudioStreamPlayer.

Причем есть три разновидности : AudioStreamPlayer, AudioStreamPlayer2D и AudioStreamPlayer3D.

AudioStreamPlayer - это просто обычный проигрыватель звуков и музыки. Остальные учитывают положение источника звука относительно сцены.
(для примера — в сцене с размерами 1000 по оси Х, нода
AudioStreamPlayer2D в координате 0 звук будет проигрывать только в левом ухе, а в координате 1000 , только в правом.)

Для того чтобы подключить звук , просто дропните файл из ресурсов в Stream

-2

В меню AudioStreamPlayer можно так же выставить автопроигрывание, громкость звука, высоту, формат (стерео\моно) и канал\шину(bus) на которой будет обрабатываться звук.
По умолчанию у нас один общий канал —
Master. Все звуки проигрываются в нем. Но конечно же мы можем добавить новые.

Посмотреть какие каналы у нас есть можно нажав на кнопку Audio в самом низу общего окна годо.

-3

Можно заметить, что на канал можно подключить эффект. Эффектов там весьма много. Есть реверберации, дисторшены, эхо и много много всего.
Кто работал со звуком — оценит.

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

-4

Теперь что касается кода.


Разберем ситуацию когда AudioStreamPlayer добавлен в сцену нами как нода.
Проигрывание стартуется методом
play(). Останавливается соответственно методом stop()

в примере выше звук играется по нажатию на кнопку
в примере выше звук играется по нажатию на кнопку

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

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

Тут нет ничего сложного. Кто читал статьи в группе со созданию нод , и подключение сигналов через код, уже знает основные «понятия».

В итоге , наш код будет выглядеть следующим образом. (комментарии на картинке)

-6

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

Глобальная музыка.

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

Для этих целей создадим сцену Global. В неё добавим плеер и сохраним её как синглтон. (статья под номером 015)
И так как это глобальная сцена — то она будет отрабатываться поверх всех.

-7

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

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