Advertisement
TIMAS_Bro

sintezetor

Oct 8th, 2023 (edited)
932
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- DECLARING
  2. local mn = peripheral.wrap("back")
  3. local mnn = peripheral.wrap("top")
  4. local spk = peripheral.find("speaker")
  5. -- FUNCTIONS
  6.  
  7. local function clear()
  8.   mn.clear()
  9. end
  10. local function setTextColor(clr)
  11.   mn.setTextColor(clr)
  12. end
  13. local function setCursorPos(x,y)
  14.   mn.setCursorPos(x,y)
  15. end
  16. local function setBackgroundColor(clr)
  17.   mn.setBackgroundColor(clr)
  18. end
  19. local function write(txt)
  20.   mn.write(txt)
  21. end
  22. local function playNote(sound,vol,ptc)
  23.   spk.playNote(sound,vol,ptc)
  24. end
  25. local function Nclear()
  26.     mnn.clear()
  27. end
  28. local function NsetTextColor(clr)
  29.   mnn.setTextColor(clr)
  30. end
  31. local function NsetCursorPos(x,y)
  32.   mnn.setCursorPos(x,y)
  33. end
  34. local function NsetBackgroundColor(clr)
  35.   mnn.setBackgroundColor(clr)
  36. end
  37. local function Nwrite(txt)
  38.   mnn.write(txt)
  39. end
  40. local sx,sy = mn.getSize()
  41. local octabeL = 12
  42. local octaveC = 6
  43. local octave = {0,1,0,1,0,0,1,0,1,0,1,0}
  44. local notes = {"C", "#","D", "#","E","F","#","G","#","A","#","H"}
  45. local swf = 0
  46. for i=1,sx do
  47.   for g=1,sy do
  48.     if (g == 1) then
  49.       setBackgroundColor(colors.brown)
  50.     else
  51.       setBackgroundColor(colors.white)
  52.     end
  53.     setCursorPos(i,g)
  54.     write(" ")
  55.   end
  56.   if (swf == 1) then
  57.     swf = 0
  58.   else
  59.     swf = 1
  60.   end
  61. end
  62. local color = 0
  63. local startingY = 1
  64. local startingX = 1
  65. for o=1,octaveC do
  66. setCursorPos(startingX, startingY)
  67. --print("SX"..startingX.." | SY: "..startingY.."O: "..o )
  68. for i=1,octabeL do
  69.   color = octave[i]
  70.   if (color == 1) then
  71.     setCursorPos(startingX + i-1, startingY + 1)
  72.     setBackgroundColor(colors.black)
  73.     for h=1,2 do
  74.       setCursorPos(startingX + i-1, startingY + 1 + h)  
  75.       if (h == 1) then
  76.         write(" ")  
  77.         setCursorPos(startingX + i-1, startingY + 1 + h-1)
  78.         setBackgroundColor(colors.black)
  79.         setTextColor(colors.black)
  80.         write(notes[i])
  81.         setCursorPos(startingX + i-1, startingY + 1 + h)
  82.         setBackgroundColor(colors.black)
  83.       else
  84.         write(" ")  
  85.       end
  86.     end
  87.   else
  88.     setBackgroundColor(colors.white)
  89.     setTextColor(colors.white)
  90.     local px, py = mn.getCursorPos()
  91.     setCursorPos(px,2)
  92.     write(notes[i])
  93.   end
  94.   setCursorPos(startingX + i, startingY)
  95. end
  96. startingY = 1
  97. startingX = 1
  98. startingX =  startingX + (octabeL * o)
  99. end
  100. local instrument = "harp"
  101. --123
  102. local nsx,nsy = mnn.getSize()
  103. NsetBackgroundColor(colors.white)
  104. Nclear()
  105. function drawBT(colorm, txt, line)
  106. NsetBackgroundColor(colorm)
  107. NsetCursorPos(1,line)
  108. for i=1,7 do
  109.     NsetBackgroundColor(colorm)
  110.     for g=1,2 do
  111.         Nwrite(" ")
  112.     end
  113.     NsetCursorPos(1+i,line)
  114. end
  115. NsetCursorPos(1,line)
  116. Nwrite(txt)
  117.    
  118. local lastWrite = nil
  119. local waitTime = nil
  120. end
  121. -- write to notesheet
  122. function writeToNotes(name, pitch)
  123.     local file = fs.open("disk/"..name, "r")
  124.     local txt = file.readAll()
  125.     file.close()
  126.     local file = fs.open("disk/"..name, "w")
  127.     if (lastWrite ~= nil) then
  128.       waitTime = os.time() *50 - lastWrite
  129.     else
  130.       waitTime = 1
  131.     end
  132.     file.write(txt..pitch.."-"..waitTime.."-"..instrument.." ")
  133.     file.close()
  134.     lastWrite = os.time() * 50
  135. end
  136. -- end func
  137.  
  138. -- recs screen
  139. function drawRSC()
  140.     NsetBackgroundColor(colors.white)
  141.     Nclear()
  142.     local recsf = fs.open("disk/recs", "r")
  143.     local recsn  = recsf.readAll()
  144.     recsf.close()
  145.     print(recsn)
  146.     for i=1,tonumber(recsn) do
  147.         if (tonumber(recsn) < 4) then
  148.             NsetCursorPos(i,1)
  149.         elseif (tonumber(recsn) < 7) then
  150.             NsetCursorPos(i,2)
  151.         elseif tonumber(recsn) < 10 then
  152.             NsetCursorPos(i,3)
  153.         end
  154.         NsetBackgroundColor(colors.green)
  155.         NsetTextColor(colors.white)
  156.         Nwrite(tostring(i))
  157.     end
  158.     NsetCursorPos(1,nsy)
  159.     NsetBackgroundColor(colors.blue)
  160.     NsetTextColor(colors.white)
  161.     Nwrite("back")
  162. end
  163. -- end
  164. drawBT(colors.green, "Record",1)
  165. drawBT(colors.blue, "Recs",2)
  166. drawBT(colors.orange, "Instrs",4)
  167. drawBT(colors.brown, "Hide",5)
  168. --123
  169. local recState = false
  170. local recName = nil
  171. local screen = 1
  172. while (true) do
  173.     event, side, xPos, yPos = os.pullEvent("monitor_touch")
  174.     if (side == "back") then
  175.         if (yPos > 1) then
  176.             local noteMBR = xPos
  177.             if (xPos > 12 and xPos < 24) then
  178.                 noteMBR = noteMBR - octabeL
  179.             elseif (xPos > 23) then
  180.                 noteMBR = (noteMBR - (octabeL *2))
  181.             end
  182.             if (xPos == 24) then
  183.                 noteMBR = 1
  184.             end
  185.             print(noteMBR.." | "..xPos)
  186.             if (string.find(notes[noteMBR], "#")) then
  187.               playNote(instrument, 1, xPos-1+0.5)
  188.               if (recState) then
  189.                 writeToNotes(tostring(recName), xPos-1+0.5)
  190.             end
  191.               for j=2,4 do
  192.                 setCursorPos(xPos,j)
  193.                 setBackgroundColor(colors.gray)
  194.                 write(" ")
  195.               end
  196.             os.sleep(0.2)
  197.             for j=2,4 do
  198.                 setCursorPos(xPos,j)
  199.                 setBackgroundColor(colors.black)
  200.                 write(" ")
  201.             end
  202.             else
  203.                 if (recState) then
  204.                     writeToNotes(tostring(recName), xPos-1)
  205.                 end
  206.                 playNote(instrument, 1, xPos-1)
  207.                 for j=2,5 do
  208.                     setCursorPos(xPos,j)
  209.                     setBackgroundColor(colors.lightGray)
  210.                     write(" ")
  211.                 end
  212.                 os.sleep(0.2)
  213.                 for j=2,5 do
  214.                     setCursorPos(xPos,j)
  215.                     setBackgroundColor(colors.white)
  216.                     write(" ")
  217.                 end
  218.             end
  219.         end
  220.     elseif (side == "top") then
  221.         if (screen == 1) then
  222.         if (yPos == 1) then
  223.             if (recState == true) then
  224.                recState = false
  225.                drawBT(colors.green, "Record",1)
  226.             else
  227.                 recState = true
  228.                 local recsf = fs.open("disk/recs", "r")
  229.                 local recsn  = recsf.readAll()
  230.                 recsf.close()
  231.                 local recsf = fs.open("disk/recs", "w")
  232.                 recsf.write(tostring(tonumber(recsn) + 1))
  233.                 recsf.close()
  234.                 recName = tonumber(recsn) + 1
  235.                 lastWrite = os.time()*50
  236.                 local recfile = fs.open("disk/"..tostring(recName), "w")
  237.                 recfile.close()
  238.                 drawBT(colors.red, "STOP",1)
  239.             end
  240.         elseif (yPos == 2) then
  241.             drawRSC()
  242.             screen = 2
  243.         elseif (yPos == 4) then
  244.             screen =3
  245.             NsetBackgroundColor(colors.white)
  246.             Nclear()
  247.             if (instrument == "harp") then
  248.             drawBT(colors.orange, "Piano",1)
  249.             drawBT(colors.red, "Guitar",2)
  250.             drawBT(colors.red, "Cowbell",3)
  251.             elseif (instrument == "guitar") then
  252.                 drawBT(colors.red, "Piano",1)
  253.                 drawBT(colors.orange, "Guitar",2)
  254.                 drawBT(colors.red, "Cowbell",3)
  255.             elseif (instrument == "cowbell") then
  256.                 drawBT(colors.red, "Piano",1)
  257.                 drawBT(colors.red, "Guitar",2)
  258.                 drawBT(colors.orange, "Cowbell",3)
  259.             else
  260.                 drawBT(colors.red, "Piano",1)
  261.                 drawBT(colors.red, "Guitar",2)
  262.                 drawBT(colors.red, "Cowbell",3)
  263.             end
  264.             drawBT(colors.blue, "back",5)
  265.         elseif (yPos == 5)  then
  266.             screen = 4
  267.             setBackgroundColor(colors.brown)
  268.             clear()
  269.             NsetBackgroundColor(colors.brown)
  270.             Nclear()
  271.         end
  272.     elseif (screen == 2) then
  273.         if (yPos == 5 and xPos < 6) then
  274.             screen =1
  275.             NsetBackgroundColor(colors.white)
  276.             Nclear()
  277.             drawBT(colors.green, "Record",1)
  278.             drawBT(colors.blue, "Recs",2)
  279.             drawBT(colors.orange, "Instrs",4)
  280.             drawBT(colors.brown, "Hide",5)
  281.         else
  282.             local rec = fs.open("disk/"..xPos, "r")
  283.             local recN  = rec.readAll()
  284.             local wait = nil
  285.             local noteN = nil
  286.             local instrName = nil
  287.             rec.close()
  288.             line = {} --Define a empty table for our words
  289.             for word in string.gmatch(recN, "%S+") do --We go thru the string word by word ("%w+") and give one word at a time the value word
  290.                 local ii = 1
  291.                 for wordd in string.gmatch(word, "[^-]+") do
  292.                     print(tonumber(wordd))
  293.                     if (ii == 2) then
  294.                         wait = tonumber(wordd)
  295.                     elseif (ii==3) then
  296.                         instrName = wordd
  297.                     else
  298.                         print("NOTE")
  299.                         noteN = tonumber(wordd)
  300.                     end
  301.                     ii = ii + 1
  302.                 end
  303.                 print("wait secs:"..wait)
  304.                 print("note: "..noteN)
  305.                 print("RECORDING: "..xPos.." | NOTE: "..noteN.." WAITTIME: "..wait)
  306.                 playNote(instrName,1,tonumber(noteN))
  307.                 local waitTimeinSeconds = wait
  308.                 os.sleep(tonumber(waitTimeinSeconds))
  309.             end --end our for loop
  310.         end
  311.     elseif (screen == 3) then
  312.         if (yPos == 1) then
  313.             instrument = "harp"
  314.         elseif (yPos == 2) then
  315.             instrument = "guitar"
  316.         elseif (yPos == 3) then
  317.             instrument = "cow_bell"
  318.         end
  319.         screen =1
  320.         NsetBackgroundColor(colors.white)
  321.         Nclear()
  322.         drawBT(colors.green, "Record",1)
  323.         drawBT(colors.blue, "Recs",2)
  324.         drawBT(colors.orange, "Instrs",4)
  325.         drawBT(colors.brown, "Hide",5)
  326.     end
  327. end
  328. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement