28 lines
857 B
Lua
28 lines
857 B
Lua
staff = {
|
|
lines = { "", "", "", "", "", "", "", "", "", "", "" },
|
|
nnotes = 0,
|
|
measure = function(self)
|
|
for i, line in ipairs(self.lines) do
|
|
self.lines[i] = line .. (i<#self.lines-1 and "|" or " ")
|
|
end
|
|
end,
|
|
play = function(self, note)
|
|
if self.nnotes%4==0 then self:measure() end
|
|
local n = #self.lines-note
|
|
for i, line in ipairs(self.lines) do
|
|
local linechar = (i%2==0) and " " or "-"
|
|
local fillchar = (i<#self.lines) and linechar or " "
|
|
self.lines[i] = line .. (i==n and linechar.."@"..linechar..fillchar or (i==n-1 or i==n-2) and string.rep(fillchar,2).."|"..fillchar or string.rep(fillchar,4))
|
|
end
|
|
self.nnotes = self.nnotes + 1
|
|
end,
|
|
dump = function(self)
|
|
for i, line in ipairs(self.lines) do print(line) end
|
|
end
|
|
}
|
|
for note = 0,7 do
|
|
staff:play(note)
|
|
end
|
|
staff:measure()
|
|
staff:dump()
|