robocyclone

Untitled

Nov 5th, 2019
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.90 KB | None | 0 0
  1. local bass = peripheral.wrap("left")
  2. local treble = peripheral.wrap("right")
  3.  
  4. local monitor = peripheral.wrap("top")
  5. term.redirect(monitor)
  6. term.clear()
  7. monitor.setTextScale(.5)
  8. monitor.setBackgroundColor(colors.gray)
  9. monitor.clear()
  10.  
  11.  
  12. local keys = {
  13.     ["cSharp"] = {window.create(monitor, 4, 0, 3, 7, true), 8},
  14.     ["dSharp"] = {window.create(monitor, 9, 0, 3, 7, true), 10},
  15.     ["fSharp"] = {window.create(monitor, 19, 0, 3, 7, true), 13},
  16.     ["gSharp"] = {window.create(monitor, 24, 0, 3, 7, true), 15},
  17.     ["aSharp"] = {window.create(monitor, 29, 0, 3, 7, true), 17},
  18.     ["c"] = {window.create(monitor, 1, 0, 4, 15, true), 7},
  19.     ["d"] = {window.create(monitor, 6, 0, 4, 15, true), 9},
  20.     ["e"] = {window.create(monitor, 11, 0, 4, 15, true), 11},
  21.     ["f"] = {window.create(monitor, 16, 0, 4, 15, true), 12},
  22.     ["g"] = {window.create(monitor, 21, 0, 4, 15, true), 14},
  23.     ["a"] = {window.create(monitor, 26, 0, 4, 15, true), 16},
  24.     ["b"] = {window.create(monitor, 31, 0, 4, 15, true), 18},
  25.     ["c2"]  = {window.create(monitor, 36, 0, 4, 15, true), 19},
  26. }
  27.  
  28. for k, v in pairs(keys) do
  29.     v = v[1]
  30.     if not k:find("Sharp") then
  31.         v.setBackgroundColor(colors.white)
  32.         v.clear()
  33.     end
  34. end
  35. for k, v in pairs(keys) do
  36.     v = v[1]
  37.     if k:find("Sharp") then
  38.         v.setBackgroundColor(colors.black)
  39.         v.clear()
  40.     end
  41. end
  42.  
  43. function checkKey(x, y)
  44.     for k, v in pairs(keys) do
  45.         v = v[1]
  46.         if k:find("Sharp") then
  47.             local vPosX, vPosY = v.getPosition()
  48.             if x >= vPosX and y >= vPosY and x <= vPosX+2 and y <= vPosY+6 then
  49.                 return k
  50.             end
  51.         elseif not k:find("Sharp") then
  52.             local vPosX, vPosY = v.getPosition()
  53.             if x >= vPosX and y >= vPosY and x <= vPosX+3 and y <= vPosY+14 then
  54.                 return k
  55.             end
  56.         else
  57.             return false
  58.         end
  59.     end
  60. end
  61.  
  62. local chordMode = false
  63. local thirdSemitones = 4 --4 is major, 3 is minor
  64.  
  65. local settings = {
  66.     ["chordButton"] = window.create(monitor, 45, 10, 10, 5),
  67.     ["qualityButton"] = window.create(monitor, 45, 5, 10, 5)
  68. }
  69.  
  70. settings["chordButton"].setBackgroundColor(colors.red)
  71. settings["chordButton"].clear()
  72.  
  73. settings["chordButton"].setBackgroundColor(colors.yellow) --yellow for major, blue for minor
  74. settings["chordButton"].clear()
  75.  
  76. function checkSettings(x, y)
  77.     for k, v in pairs(settings) do
  78.         if k == "chordButton" then
  79.             local vPosX, vPosY = v.getPosition()
  80.             if x >= vPosX and y >= vPosY and x <= vPosX + 9 and y <= vPosY + 4 then
  81.                 if chordMode then
  82.                     chordMode = false
  83.                     settings["chordButton"].setBackgroundColor(colors.red)
  84.                     settings["chordButton"].clear()
  85.                 else
  86.                     chordMode = true
  87.                     settings["chordButton"].setBackgroundColor(colors.green)
  88.                     settings["chordButton"].clear()
  89.                 end
  90.                 return true
  91.             end
  92.         elseif k == "qualityButton" then
  93.             local vPosX, vPosY = v.getPosition()
  94.             if x >= vPosX and y >= vPosY and x <= vPosX + 9 and y <= vPosY + 4 then
  95.                 if thirdSemitones == 3 then then
  96.                     thirdSemitones = 4
  97.                     settings["qualityButton"].setBackgroundColor(colors.yellow)
  98.                     settings["qualityButton"].clear()
  99.                 else
  100.                     thirdSemitones = 3
  101.                     settings["qualityButton"].setBackgroundColor(colors.blue)
  102.                     settings["qualityButton"].clear()
  103.                 end
  104.                 return true
  105.             end        
  106.         else
  107.             return false
  108.         end
  109.     end
  110. end
  111.  
  112. while true do
  113.     event, side, xPos, yPos = os.pullEvent("monitor_touch")
  114.     if not checkSettings(xPos, yPos) then
  115.         local keyHit = checkKey(xPos, yPos)
  116.         if keyHit then
  117.             local root = keys[keyHit][2]
  118.             local third = root
  119.             local perfFifth = root
  120.             if root <= 17 then
  121.                 third = root+thirdSemitones
  122.                 perfFifth = root+7
  123.             end
  124.             if chordMode == false then
  125.                 bass.playNote("bass", 2, root)
  126.                 treble.playNote("harp", 2, root)
  127.             else
  128.                 bass.playNote("bass", 2, root)
  129.                 bass.playNote("bass", 2, third)
  130.                 bass.playNote("bass", 2, perfFifth)
  131.                 treble.playNote("harp", 2, third)
  132.                 treble.playNote("harp", 2, perfFifth)
  133.                 treble.playNote("harp", 2, root)
  134.             end
  135.         end
  136.     end
  137. end
Advertisement
Add Comment
Please, Sign In to add comment