Skip to content

Модуль snd

Мы уже рассматривали базовые возможности по работе со звуком. Модуль snd имеет ещё некоторые функции по работе со звуком.

Вы можете подгрузить звук и держать его в памяти до тех пор, пока он вам нужен.

lua
require 'snd'
local wav = snd.new 'bark.ogg'

Кроме подгрузки файлов, вы можете загрузить звук из массива lua:

lua
local wav = {}
for i = 1, 10000 do
	table.insert(wav, rnd() * 2 - 1) -- случайные значения от -1 до 1
end

function start()
	local p = snd.new(22050, 1, wave) -- частота, число каналов и звук
	p:play()
end

Звук задаётся в нормированном формате: [-1 .. 1]

Звук можно проиграть методом :play([chan], [loop]), где chan -- канал (0 - 7), loop - циклы (0 - бесконечность).

Остальные функции модуля:

  • snd.stop([channel]) – остановить проигрывание выбранного канала или всех каналов. Вторым параметром можно задавать время затухания звука в мс. при его приглушении;

  • snd.playing([channel]) – узнать проигрывается ли звук на любом канале или на выбранном канале; если выбран конкретный канал, функция вернёт хандл (дескриптер) проигрываемого в данный момент звука или nil. Внимание! Звук клика не учитывается и обычно занимает 0 канал;

  • snd.pan(chan, l, r) – задание паннинга. Канал, громкость левого[0-255], громкость правого[0-255] каналов. Необходимо вызывать перед проигрыванием звука, чтобы имело эффект;

  • snd.vol(vol) – задание громкости звука (и музыки и эффектов) от 0 до 127.

Ещё одна интересная возможность -- генерирование звука на лету (пока находится в экспериментальном статусе):

lua
require "snd"

function cb(hz, len, data)
	for i = 1, len do
		data[i] = rnd() * 2 - 1
	end
end
function start()
	snd.music_callback(cb)
end