robocyclone

ComputerCraft Synthesizer

Nov 4th, 2019
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.98 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. local chordMode = false
  12.  
  13. local keys = {
  14.     ["cSharp"] = {window.create(monitor, 4, 0, 3, 7, true), 8},
  15.     ["dSharp"] = {window.create(monitor, 9, 0, 3, 7, true), 10},
  16.     ["fSharp"] = {window.create(monitor, 19, 0, 3, 7, true), 13},
  17.     ["gSharp"] = {window.create(monitor, 24, 0, 3, 7, true), 15},
  18.     ["aSharp"] = {window.create(monitor, 29, 0, 3, 7, true), 17},
  19.     ["c"] = {window.create(monitor, 1, 0, 4, 15, true), 7},
  20.     ["d"] = {window.create(monitor, 6, 0, 4, 15, true), 9},
  21.     ["e"] = {window.create(monitor, 11, 0, 4, 15, true), 11},
  22.     ["f"] = {window.create(monitor, 16, 0, 4, 15, true), 12},
  23.     ["g"] = {window.create(monitor, 21, 0, 4, 15, true), 14},
  24.     ["a"] = {window.create(monitor, 26, 0, 4, 15, true), 16},
  25.     ["b"] = {window.create(monitor, 31, 0, 4, 15, true), 18},
  26.     ["c2"]  = {window.create(monitor, 36, 0, 4, 15, true), 19},
  27. }
  28.  
  29. local chordButton = window.create(monitor, 45, 10, 10, 5)
  30.  
  31. for k, v in pairs(keys) do
  32.     v = v[1]
  33.     if not k:find("Sharp") then
  34.         v.setBackgroundColor(colors.white)
  35.         v.clear()
  36.     end
  37. end
  38. for k, v in pairs(keys) do
  39.     v = v[1]
  40.     if k:find("Sharp") then
  41.         v.setBackgroundColor(colors.black)
  42.         v.clear()
  43.     end
  44. end
  45. chordButton.setBackgroundColor(colors.red)
  46. chordButton.clear()
  47.  
  48. function checkKey(x, y)
  49.     for k, v in pairs(keys) do
  50.         v = v[1]
  51.         if k:find("Sharp") then
  52.             local vPosX, vPosY = v.getPosition()
  53.             if x >= vPosX and y >= vPosY and x <= vPosX+2 and y <= vPosY+6 then
  54.                 return k
  55.             end
  56.         elseif not k:find("Sharp") then
  57.             local vPosX, vPosY = v.getPosition()
  58.             if x >= vPosX and y >= vPosY and x <= vPosX+3 and y <= vPosY+14 then
  59.                 return k
  60.             end
  61.         else
  62.             return false
  63.         end
  64.     end
  65. end
  66.  
  67. function checkChordButton(x, y)
  68.     local vPosX, vPosY = chordButton.getPosition()
  69.     if x >= vPosX and y >= vPosY and x <= vPosX+9 and y <= vPosY+4 then
  70.         if not chordMode then
  71.             chordMode = true
  72.             chordButton.setBackgroundColor(colors.green)
  73.             chordButton.clear()
  74.         else
  75.             chordMode = false
  76.             chordButton.setBackgroundColor(colors.red)
  77.             chordButton.clear()
  78.         end
  79.         return true
  80.     end
  81.     return false
  82. end
  83.  
  84. while true do
  85.     event, side, xPos, yPos = os.pullEvent("monitor_touch")
  86.     if not checkChordButton(xPos, yPos) then
  87.         local keyHit = checkKey(xPos, yPos)
  88.         if keyHit then
  89.             local root = keys[keyHit][2]
  90.             local majThird = root
  91.             local perfFifth = root
  92.             if root <= 17 then
  93.                 majThird = root+4
  94.                 perfFifth = root+7
  95.             end
  96.             if chordMode == false then
  97.                 bass.playNote("bass", 2, root)
  98.                 treble.playNote("harp", 2, root)
  99.             else
  100.                 bass.playNote("bass", 2, root)
  101.                 bass.playNote("bass", 2, majThird)
  102.                 bass.playNote("bass", 2, perfFifth)
  103.                 treble.playNote("harp", 2, majThird)
  104.                 treble.playNote("harp", 2, perfFifth)
  105.                 treble.playNote("harp", 2, root)
  106.             end
  107.         end
  108.     end
  109. end
Advertisement
Add Comment
Please, Sign In to add comment