Модуль snd
Мы уже рассматривали базовые возможности по работе со звуком. Модуль snd имеет ещё некоторые функции по работе со звуком.
Вы можете подгрузить звук и держать его в памяти до тех пор, пока он вам нужен.
require 'snd'
local wav = snd.new 'bark.ogg'Кроме подгрузки файлов, вы можете загрузить звук из массива 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.
Ещё одна интересная возможность -- генерирование звука на лету (пока находится в экспериментальном статусе):
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