pulsar/shared/instrument.lua

31 lines
744 B
Lua
Raw Normal View History

2024-03-16 23:23:31 +00:00
instrument=klass()
function instrument:init(callback)
self.callback=callback
self.volume=1.0
end
function instrument:spackle(track,channel,t0,t1,note,verbs)
-- a one-indexed table of note data
-- (one-indexed because Lua kind of sucks)
local nflagses,keep_silence=self.callback(t1-t0,note,instrument_split_verbs(verbs))
for i,nflags in pairs(nflagses) do
if nflags.v>0 or keep_silence then
nflags = nflags:clone() -- avoid breaking instrument
local min_v=0
if (nflags.v>0) min_v = 1
nflags.v = mid(flr(nflags.v * self.volume + 0.5),min_v,7)
track:plot(channel,t0+i-1,nflags)
end
end
end
instrument_split_verbs=function(x)
if (not x) return {}
local t={}
for i in all(split(x)) do
t[i]=true
end
return t
end