Музыка в WME

Wintermute Engine предоставляет несколько различных методов для работы с музыкальными файлами. Все они принадлежат объекту Game. За детальным описанием каждого метода обратитесь к главе Программирование.

 

Стандартное воспроизведение музыки

Самым важным, вероятно, является метод Game.PlayMusic(). В качестве аргумента ему передаётся звуковой файл (Wav или Ogg), и указывается, должен он воспроизводиться циклически или нет.

Например:

Game.PlayMusic("music\MyMusic.ogg", true);

Это строка кода указывает WME проигрывать файл MyMusic.ogg, и при завершении повторять воспроизведение с самого начала.

Но, так как композитору бывает трудно достигнуть такого эффекта, чтобы переход с конца на начало был незаметен, метод PlayMusic() принимает третий необязательный параметр, который задаёт начальную точку для повторного воспроизведения композиции. Она задаётся в милисекундах:

Game.PlayMusic("music\MyMusic.ogg", true, 6890);

Есть также много других функций для работы с музыкальными файлами, таких как Game.StopMusic(), Game.GetMusicPosition() и т. д. Для более подробного описания см. Программирование. Объект Game.

Как правило, Вы будете помещать вызов метода Game.PlayMusic в инициализационном файле сценария scene_init.script каждой сцены, задавая таким образом, когда должно начаться воспроизведение музыки.

 

Многоканальный звук и плавное затухание

В то время как стандартный набор функций, описанных выше, способен работать лишь с одним звуковым каналом, WME предоставляет дополнительный набор функций, позволяющих Вам работать с несколькими звуковыми каналами одновременно. WME поддерживает 5 каналов звука, пронумерованных с 0 до 4.

Методы для обработки многоканальной музыки имеют имена, подобные именам методов, описанных выше, только в них слово Music заменено на MusicChannel. Ниже приведены методы для воспроизведения музыки для одно- и многоканального вариантов:

Все многоканальные функции в качестве первого аргумента принимают номер канала, который лежит в диапазоне от 0 до 4. Одноканальные функции всегда работают с каналом 0.

За подробным описанием всех методов для работы с музыкой обращайтесь к разделу Программирование. Объект Game.

Многоканальность воспроизведения предоставляет возможность плавного перехода от одного канала к другому (воспроизведение музыки в одном плавно затухает, а в другом - нарастает). Для этих целей служит метод Game.MusicCrossfade(). Ему нужно указать между какими двумя каналами нужно осуществить переход и как долго он должен длиться по времени. Вы также можете указать, должны ли эти два канала поменяться местами после перехода. Это полезно для того, чтобы основную мелодию всегда воспроизводить в одном и том же канале.

Приведём типичный пример использования плавного перехода. Вы запускаете проигрывание музыки на одном из каналов. Обычно это делается при инициализации сцены, т. е. в сценарии scene_init.script:

Game.PlayMusicChannel(0, "music\FirstChannel.ogg", true);

Музыка звучит на канале 0. Далее происходит какое-то событие, и мы хотим, чтобы играющая в настоящий момент мелодия плавно перетекла в другую. Для этого нам нужно запустить воспроизведение новой мелодии на другом канале и вызвать метод MusicCrossfade:

Game.PlayMusicChannel(1, "music\SecondChannel.ogg");
Game.MusicCrossfade(0, 1, 3000);

Эти две строки кода запускают воспроизведение музыки на канале 1 и задают плавный переход, который займёт по времени 3 секунды и по его окончании каналы поменяются номерами, т. е. музыка по-прежнему будет проигрываться на канале 0, только мелодия уже будет другой.

Иногда Вам может понадобиться начинать воспроизведение на втором канале не с начала, а с какой-то определённой позиции. В этом случае Вам нужно сперва вызвать метод Game.SetMusicChannelPosition:

Game.SetMusicChannelPosition(1, 10000);
Game.PlayMusicChannel(1, "music\SecondChannel.ogg");
Game.MusicCrossfade(0, 1, 3000);