118 lines
2.6 KiB
Lua
118 lines
2.6 KiB
Lua
function _init()
|
|
local bgm=build_bgm()
|
|
local free_patterns={}
|
|
for i=4,63 do add(free_patterns,i) end
|
|
|
|
bgm:build(free_patterns,0)
|
|
|
|
cstore(0x3100,0x3100,0x1200)
|
|
music(0)
|
|
end
|
|
function _update()
|
|
end
|
|
function _draw()
|
|
cls(0)
|
|
print("enjoy the music!")
|
|
end
|
|
|
|
function build_bgm()
|
|
local bgm=track:new()
|
|
|
|
bgm:add(32)
|
|
bgm:add(32)
|
|
bgm:add(32)
|
|
bgm:add(32)
|
|
|
|
local bassline=instrument:new(devil(8,2,7,4))
|
|
local yowler=instrument:new(devil(9,2,7,4))
|
|
local melo1=instrument:new(melo1)
|
|
local drums=instrument:new(drums)
|
|
local p0=performer:new(bgm,0,bassline,0,{12-2})
|
|
local p1=performer:new(bgm,1,yowler,0,{12-2})
|
|
local p2=performer:new(bgm,2,melo1,0,{12-2})
|
|
local pd=performer:new(bgm,2,drums,0,{0})
|
|
local ph=performer:new(bgm,2,drums,0,{0})
|
|
--local pm=performer:new(bgm,2,melo1,0,{48-2})
|
|
|
|
conductor:new(bgm,0):perform(
|
|
{p0,p1,p2,pd,ph},
|
|
pitchblocks:new(4)
|
|
:add(8,{0,7,15,27})
|
|
:add(4,{0,8,15,27})
|
|
:add(4,{5,9,15,27})
|
|
:add(8,{3,10,15,27})
|
|
:add(4,{5,9,15,27})
|
|
:add(4,{5,8,15,27})
|
|
,
|
|
{
|
|
"Aa.AaaAaaAaa..Aa" .. "Aa.AaaA.Aa..Aaaa",
|
|
"Bb.BbbB.Bb.BbbB." .. "Bb.BbbB.Bb.BbbB.",
|
|
"Cd.Cd.Cd.Cd.Cdd." .. "Cd.Cd.Cd.Cd.Cdd.",
|
|
"@...!...@...!..." .. "@...!...@.@.!.@.",
|
|
"..'...'...'...'." .. "..'...'...'...'."
|
|
}
|
|
)
|
|
|
|
conductor:new(bgm,32):perform(
|
|
{p0,p1,p2,pd,ph},
|
|
pitchblocks:new(4)
|
|
:add(4,{0,7,15,27})
|
|
:add(4,{0,10,15,27})
|
|
:add(4,{5,12,15,29})
|
|
:add(4,{5,14,15,29})
|
|
:add(4,{3,12,15,31})
|
|
:add(4,{3,10,15,31})
|
|
:add(4,{5,9,15,33})
|
|
:add(4,{5,8,15,32})
|
|
,
|
|
{
|
|
"Aa.AaaA.Aa..Aaaa" .. "Aa.AaaAaaAaa..Aa",
|
|
"BbBbBbBbBbBbBbBb" .. "BbBbBbBbBbBbBbBb",
|
|
"Cd.Cd.Cd.Cd.Cdd." .. "Cd.Cd.Cd.Cd.Cdd.",
|
|
"@.@.!.@.@.@.!.@." .. "@...!...@.@...@.",
|
|
"..''..'...''..'." .. "..'...'...'...'."
|
|
}
|
|
)
|
|
|
|
return bgm
|
|
end
|
|
|
|
function devil(w,e,v0,v1)
|
|
return function(duration,pitch,verbs)
|
|
local out={}
|
|
for i=1,duration do
|
|
local v=v1
|
|
if (i == 1) v=v0
|
|
out[i]=nflags:new{p=pitch,v=v,w=w,e=e}
|
|
end
|
|
if (verbs.slide and #out>0) out[1].e=1
|
|
if (verbs.chop and #out>0) out[1].e=3
|
|
return out
|
|
end
|
|
end
|
|
|
|
function drums(duration,pitch,verbs)
|
|
if verbs.kick then
|
|
return {
|
|
-- kind of a cool sidechained bass effect, but not useful here
|
|
-- nflags:new{p=10,v=7,w=8,e=0},
|
|
-- nflags:new{p=0,v=5,w=8,e=1}
|
|
|
|
nflags:new{p=19,v=7,w=10,e=0},
|
|
-- nflags:new{p=12,v=5,w=2,e=0}
|
|
}
|
|
end
|
|
if (verbs.snare) return {nflags:new{p=30,v=7,w=6,e=3}}
|
|
if (verbs.hihat) return {nflags:new{p=30,v=2,w=11,e=3}}
|
|
|
|
return {}
|
|
end
|
|
|
|
function melo1(duration,pitch,verbs)
|
|
local v=3
|
|
local out={}
|
|
for i=1,duration do
|
|
out[i]=nflags:new{p=pitch,w=2,v=v,e=5}
|
|
end
|
|
return out
|
|
end |