local speaker = peripheral.wrap("left")
local notes = {
["F#1"]=0, ["F#2"]=12,
["Gb1"]=0, ["Gb2"]=12,
["G1"]=1, ["G2"]=13,
["G#1"]=2, ["G#2"]=14,
["Ab1"]=2, ["Ab2"]=14,
["A1"]=3, ["A2"]=15,
["A#1"]=4, ["A#2"]=16,
["Bb1"]=4, ["Bb2"]=16,
["B1"]=5, ["B2"]=17,
["C1"]=6, ["C2"]=18,
["C#1"]=7, ["C#2"]=19,
["Db1"]=7, ["Db2"]=19,
["D1"]=8, ["D2"]=20,
["D#1"]=9, ["D#2"]=21,
["Eb1"]=9, ["Eb2"]=21,
["E1"]=10, ["E2"]=22,
["F1"]=11, ["F2"]=23,
["F#3"]=24,
["Gb3"]=24,
}
local function playNote(instrument,note,volume)
volume = volume or 1
speaker.playNote(instrument,volume,notes[note])
end
local function harp(note,volume)
playNote("harp",note,volume)
end
--test
local function a1()
harp "E1"
harp "G2"
harp "B2"
end
local function a2()
harp "G2"
harp "C2"
harp "E2"
end
local function a3()
harp "G2"
harp "B2"
harp "D2"
end
local function a4()
harp "D1"
harp "F#2"
harp "A2"
end
--[[
--local bpm = 136
--local bps = bpm / 60
--local spb = 1 / bps
--local quarter = spb / 4
--]]
local function a(f,...)
local t={...}
for _,s in ipairs(t) do
if s > 0 then
f()
sleep(0.15 * s)
else
sleep(-0.15 * s)
end
end
end
local function song()
a(a1, 2,2,1,2,2)
a(a2, 1,2,2)
a(a3, 1,2,2)
a(a4, 1)
a(a1, 2,2,1,2,2)
a(a2, 1)
a(a1, 2,2,1,2,2)
a(a2, 1)
a(a1, 2,2,1,2,2)
a(a2, 1,2,2)
a(a3, 1,2,2)
a(a4, 1)
a(a1, 2,2,1,2,2)
a(a2, 1)
a(a1, 2,2,1,2,2)
a(a2, 1)
local t1 = 1/3
local t2 = 2/3
parallel.waitForAll(
function() a(a1, 2,2,1,2,2) end,
function() a(function()harp "B2" end, -t1,t1,t2,t2) end
)
a(a2, 1,2,2)
a(a3, 1,2,2)
a(a4, 1)
parallel.waitForAll(
function() a(a1, 2,2,1,2,2) end,
function() a(function()harp "B2" end, -t1,t1,t2,t2) end
)
a(a2, 1)
a(a1, 2,2,1,2,2)
a(a2, 1)
for i=1,4 do
parallel.waitForAll(
function() a(a1, 2,2,1) end,
function() a(function()harp "B2" end, -t1,t1,t2,t2) end
)
end
for i=1,3 do
parallel.waitForAll(
function() a(a1, 2,2,1) end,
function() a(function()harp "B2" end, -t1,t1,t2,t1,t1) end
)
end
parallel.waitForAll(
function() a(a1, 2,2,1) end,
function() a(function()harp "B2" end, -t1,t1,t2) end
)
for j=1,3 do
a(a1, .5,.5,.5,.5,1)
a(a1, .5,.5,.5,.5,.5,.5,1)
a(a2, .5,.5,.5,.5,.5,.5,1)
a(a3, .5,.5,.5,.5,.5,.5,1)
a(a4, .5,.5)
for i=1,3 do
a(a1, .5,.5,.5,.5,1)
a(a1, .5,.5,.5,.5,.5,.5,1)
a(a2, .5,.5)
end
a(a2, .5,.5,.5,.5,1)
a(a3, .5,.5,.5,.5,.5,.5,1)
a(a4, .5,.5)
end
end
local function scrollWrite(text)
local w,h = term.getSize()
text = string.rep(" ", w) .. text
term.clear()
while #text > 0 do
sleep(0.5,text)
term.setCursorPos(1,h)
term.clearLine()
term.write(text)
text = text:sub(2)
end
term.clear()
end
local monitor = peripheral.wrap("bottom")
term.redirect(monitor)
parallel.waitForAll(
function() scrollWrite("What's the song at 00:06?") end,
song
)
term.redirect(term.native())
--eof
Comments