Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local bass = peripheral.wrap("left")
- local treble = peripheral.wrap("right")
- local monitor = peripheral.wrap("top")
- term.redirect(monitor)
- term.clear()
- monitor.setTextScale(.5)
- monitor.setBackgroundColor(colors.gray)
- monitor.clear()
- local keys = {
- ["cSharp"] = {window.create(monitor, 4, 0, 3, 7, true), 8},
- ["dSharp"] = {window.create(monitor, 9, 0, 3, 7, true), 10},
- ["fSharp"] = {window.create(monitor, 19, 0, 3, 7, true), 13},
- ["gSharp"] = {window.create(monitor, 24, 0, 3, 7, true), 15},
- ["aSharp"] = {window.create(monitor, 29, 0, 3, 7, true), 17},
- ["c"] = {window.create(monitor, 1, 0, 4, 15, true), 7},
- ["d"] = {window.create(monitor, 6, 0, 4, 15, true), 9},
- ["e"] = {window.create(monitor, 11, 0, 4, 15, true), 11},
- ["f"] = {window.create(monitor, 16, 0, 4, 15, true), 12},
- ["g"] = {window.create(monitor, 21, 0, 4, 15, true), 14},
- ["a"] = {window.create(monitor, 26, 0, 4, 15, true), 16},
- ["b"] = {window.create(monitor, 31, 0, 4, 15, true), 18},
- ["c2"] = {window.create(monitor, 36, 0, 4, 15, true), 19},
- }
- for k, v in pairs(keys) do
- v = v[1]
- if not k:find("Sharp") then
- v.setBackgroundColor(colors.white)
- v.clear()
- end
- end
- for k, v in pairs(keys) do
- v = v[1]
- if k:find("Sharp") then
- v.setBackgroundColor(colors.black)
- v.clear()
- end
- end
- function checkKey(x, y)
- for k, v in pairs(keys) do
- v = v[1]
- if k:find("Sharp") then
- local vPosX, vPosY = v.getPosition()
- if x >= vPosX and y >= vPosY and x <= vPosX+2 and y <= vPosY+6 then
- return k
- end
- elseif not k:find("Sharp") then
- local vPosX, vPosY = v.getPosition()
- if x >= vPosX and y >= vPosY and x <= vPosX+3 and y <= vPosY+14 then
- return k
- end
- else
- return false
- end
- end
- end
- local chordMode = false
- local thirdSemitones = 4 --4 is major, 3 is minor
- local settings = {
- ["chordButton"] = window.create(monitor, 45, 10, 10, 5),
- ["qualityButton"] = window.create(monitor, 45, 5, 10, 5)
- }
- settings["chordButton"].setBackgroundColor(colors.red)
- settings["chordButton"].clear()
- settings["chordButton"].setBackgroundColor(colors.yellow) --yellow for major, blue for minor
- settings["chordButton"].clear()
- function checkSettings(x, y)
- for k, v in pairs(settings) do
- if k == "chordButton" then
- local vPosX, vPosY = v.getPosition()
- if x >= vPosX and y >= vPosY and x <= vPosX + 9 and y <= vPosY + 4 then
- if chordMode then
- chordMode = false
- settings["chordButton"].setBackgroundColor(colors.red)
- settings["chordButton"].clear()
- else
- chordMode = true
- settings["chordButton"].setBackgroundColor(colors.green)
- settings["chordButton"].clear()
- end
- return true
- end
- elseif k == "qualityButton" then
- local vPosX, vPosY = v.getPosition()
- if x >= vPosX and y >= vPosY and x <= vPosX + 9 and y <= vPosY + 4 then
- if thirdSemitones == 3 then then
- thirdSemitones = 4
- settings["qualityButton"].setBackgroundColor(colors.yellow)
- settings["qualityButton"].clear()
- else
- thirdSemitones = 3
- settings["qualityButton"].setBackgroundColor(colors.blue)
- settings["qualityButton"].clear()
- end
- return true
- end
- else
- return false
- end
- end
- end
- while true do
- event, side, xPos, yPos = os.pullEvent("monitor_touch")
- if not checkSettings(xPos, yPos) then
- local keyHit = checkKey(xPos, yPos)
- if keyHit then
- local root = keys[keyHit][2]
- local third = root
- local perfFifth = root
- if root <= 17 then
- third = root+thirdSemitones
- perfFifth = root+7
- end
- if chordMode == false then
- bass.playNote("bass", 2, root)
- treble.playNote("harp", 2, root)
- else
- bass.playNote("bass", 2, root)
- bass.playNote("bass", 2, third)
- bass.playNote("bass", 2, perfFifth)
- treble.playNote("harp", 2, third)
- treble.playNote("harp", 2, perfFifth)
- treble.playNote("harp", 2, root)
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment