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); |