В этой статье рассмотрим работу со звуком. Сильно углубляться не будем, ибо тема весьма обширная. Пройдемся по основам, так сказать для того что-бы понимать тему в общем и целом.
После добавления звукового файла в ресурсы , мы сразу можем проводить некоторые манипуляции.
(я использовал файл в формате WAV. Настройки импорта могут варьироваться в зависимости от формата):
Например можно включить галочку возле Loop. Таким образом файл будет воспроизводиться постоянно по кругу.
Не забываем, после настроек нажать кнопку Reimport в меню импорта.
Звук проигрывается в годо при помощи ноды AudioStreamPlayer.
Причем есть три разновидности : AudioStreamPlayer, AudioStreamPlayer2D и AudioStreamPlayer3D.
AudioStreamPlayer - это просто обычный проигрыватель звуков и музыки. Остальные учитывают положение источника звука относительно сцены.
(для примера — в сцене с размерами 1000 по оси Х, нода AudioStreamPlayer2D в координате 0 звук будет проигрывать только в левом ухе, а в координате 1000 , только в правом.)
Для того чтобы подключить звук , просто дропните файл из ресурсов в Stream
В меню AudioStreamPlayer можно так же выставить автопроигрывание, громкость звука, высоту, формат (стерео\моно) и канал\шину(bus) на которой будет обрабатываться звук.
По умолчанию у нас один общий канал — Master. Все звуки проигрываются в нем. Но конечно же мы можем добавить новые.
Посмотреть какие каналы у нас есть можно нажав на кнопку Audio в самом низу общего окна годо.
Можно заметить, что на канал можно подключить эффект. Эффектов там весьма много. Есть реверберации, дисторшены, эхо и много много всего.
Кто работал со звуком — оценит.
Надо уточнить , что Master будет контролировать всех как глобальный канал. Например выключить вообще все звуки можно через него, не тыкая в каждый отдельный канал.
Каждый новый канал может быть привязан к разным каналам. По умолчанию все они лежат под Master.
Теперь что касается кода.
Разберем ситуацию когда AudioStreamPlayer добавлен в сцену нами как нода.
Проигрывание стартуется методом play(). Останавливается соответственно методом stop()
Тут можно заметить, что если мы будем часто нажимать на кнопку, то будет слышно как звук обрывается и стартует снова.
Это в принципе логично. Ведь плеер один.
Таким образом мы подходим к моменту, когда нам надо создавать плеер через код, чтобы каждое новое проигрывание не мешало предыдущему.
Тут нет ничего сложного. Кто читал статьи в группе со созданию нод , и подключение сигналов через код, уже знает основные «понятия».
В итоге , наш код будет выглядеть следующим образом. (комментарии на картинке)
Теперь каждый раз нажимая на кнопку будет создаваться новый плеер, и все эти плееры будут играть звуки параллельно.
Ну а по завершению — самоуничтожаться.
Глобальная музыка.
Ну и напоследок разберемся с распространенной ситуацией когда мы переходим из сцены в сцену но общая музыка должна играть без разрывов.
Для этих целей создадим сцену Global. В неё добавим плеер и сохраним её как синглтон. (статья под номером 015)
И так как это глобальная сцена — то она будет отрабатываться поверх всех.
Не забываем включить галочку возле autoplay, если вам нужно чтобы музыка начала проигрываться сразу при старте приложения, и loop в свойствах файла если вам надо чтобы она играла бесконечно.
Подписывайтесь, если вам интересен такой материал.
И удачи в изучении годо!