Skip to content

Музыка

Для работы с музыкой и звуками вам понадобится модуль snd.

lua
require "snd"

Интерпретатор проигрывает в цикле текущую музыку, которая задаётся с помощью функции: 'snd.music(путь к музыкальному файлу)'.

Важно!

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

Поддерживается большинство музыкальных форматов, но настоятельно рекомендуется использовать формат 'ogg', так как именно он поддерживается наилучшим образом во всех версиях INSTEAD (для различных платформ).

Важно!

Следует проявлять осторожность при использовании трекерной музыки, так как в некоторых дистрибутивах Linux могут быть проблемы при проигрывании определённых файлов (ошибки в связке библиотек SDL_mixer и libmikmod).

Также, если вы используете 'mid' файлы, будьте готовы к тому, что игрок услышит их только в Windows версии INSTEAD (так как в большинстве случаев, Unix версии SDL_mixer собраны без поддержки ''timidity'').

В качестве частоты музыкальных файлов используйте частоты кратные 11025.

lua
room {
	pic = 'gfx/street.png';
	enter = function()
		snd.music 'mus/rain.ogg'
	end;
	nam = 'на улице';
	dsc = 'На улице идёт дождь.';
};

'snd.music()' без параметра возвращает текущее имя трека.

В функцию 'snd.music()' можно передавать второй параметр -- количество проигрываний (циклов). Получить текущий счётчик можно с помощью 'snd.music()' без параметров -- второе возвращаемое значение. 0 -- означает вечный цикл. 1..n -- количество проигрываний. -1 -- проигрывание текущего трека закончено.

Для того, чтобы отменить проигрывание музыки, вы можете использовать 'snd.stop_music()'

Для того, чтобы узнать, играет ли музыка:

lua
snd.music_playing()

Вы можете задавать время нарастания и затухания музыки, с помощью вызова:

lua
snd.music_fading(o, [i])

Здесь o - время в мс. для затухания и i - время в мс. для нарастания музыки. Если задан только один параметр -- оба времени считаются одинаковыми. После вызова, установленные параметры будут влиять на проигрывание всех музыкальных файлов.

Для проигрывания звуков используйте 'snd.play()'. Настоятельно рекомендуется использовать формат 'ogg', хотя большинство распространённых звуковых форматов также будет работать.

Различие между музыкой и звуковым файлом заключается в том, что движок следит за процессом проигрывания музыки и сохраняет/восстанавливает текущий проигрываемый трек. Выйдя из игры и загрузив её снова, игрок услышит то же музыкальное оформление, что слышал при выходе. Звуки обычно означают кратковременные эффекты, и движок не сохраняет и не восстанавливает звуковые события. Так, если игрок не успел дослушать звук выстрела и вышел из игры, после загрузки файла сохранения он не услышит звук (или его окончание) снова.

Тем не менее, если учесть то, что 'snd.play()' позволяет запускать зацикленные звуки, то различие между музыкой и звуками становится уже не таким однозначным.

Итак, определение функции: 'snd.play(файл, [канал], [цикл])', где:

  • файл -- путь и\или имя звукового файла;
  • канал -- номер канала [0..7]; Если не указан, то выберется первый свободный.
  • цикл -- количество проигрываний 1..n, 0 -- зацикливание.

Для остановки проигрывания звука можно использовать 'snd.stop()'. Для остановки звука в определённом канале 'snd.stop(канал)'.

Важно!

Если вы используете зацикленные звуки, вам придётся самим восстанавливать их состояние (запускать снова с помощью 'snd.sound()') в функции 'start()'

Например:

lua
global 'wind_blow' (false)
...
function start()
	if wind_blow then
		snd.play('snd/wind.ogg', 0)
	end
end

Если вам недостаточно описанных здесь функций по работе со звуком, используйте полное описание модуля "snd".