Advertisement
HappySunChild

speakerJukebox

Mar 7th, 2022 (edited)
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 10.69 KB | None | 0 0
  1. local speaker = peripheral.find("speaker")
  2.  
  3. term.clear()
  4. term.setCursorPos(1,1)
  5.  
  6. function promptInput(promptText)
  7.     term.write(promptText)
  8.     return read()
  9. end
  10.  
  11. local volume = promptInput("Enter volume: ")
  12. local pitch = promptInput("Enter pitch: ")
  13.  
  14. function playSound(soundPath)
  15.     if soundPath and soundPath ~= "" then
  16.         speaker.playSound(soundPath,tonumber(volume) or 1,tonumber(pitch) or 1)
  17.     end
  18. end
  19.  
  20. local RECORDS = {
  21.     {"11",colors.brown},
  22.     {"13",colors.red},
  23.     {"blocks",colors.orange},
  24.     {"cat",colors.yellow},
  25.     {"chirp",colors.lime},
  26.     {"far",colors.green},
  27.     {"mall",colors.cyan},
  28.     {"mellohi",colors.lightBlue},
  29.     {"pigstep",colors.blue},
  30.     {"stal",colors.purple},
  31.     {"strad",colors.magenta},
  32.     {"wait",colors.pink},
  33.     {"ward",colors.red}
  34. }
  35.  
  36. function isARecord(str)
  37.     for i,record in pairs(RECORDS) do
  38.         if str == record[1] then
  39.             return true, "music_disc." .. str
  40.         end
  41.     end
  42.  
  43.     return false
  44. end
  45.  
  46. function printCenter(y, str, col)
  47.     term.setTextColor(col or colors.white)
  48.  
  49.     local x = math.floor((26 - string.len(str)) / 2)
  50.     term.setCursorPos(x,y)
  51.     term.clearLine()
  52.     term.write(str)
  53. end
  54.  
  55. function resetTerm()
  56.     term.setCursorPos(1,1)
  57.     term.clear()
  58.     term.setTextColor(colors.white)
  59. end
  60.  
  61. function createSaveFile()
  62.     if not fs.exists("saved.txt") then
  63.         local file = fs.open("saved.txt","w")
  64.         file.write("")
  65.         file.close()
  66.     end
  67. end
  68.  
  69. function resetSaveFile()
  70.     if not fs.exists("saved.txt") then
  71.         createSaveFile()
  72.     else
  73.         local file = fs.open("saved.txt","w")
  74.         file.write("")
  75.         file.close()
  76.     end
  77. end
  78.  
  79. function addJsonIdToSaveFile(id,name)
  80.     if not fs.exists("saved.txt") then
  81.         createSaveFile()
  82.         addJsonIdToSavedFile(id,name)
  83.     else
  84.         local file = fs.open("saved.txt","a")
  85.         file.write(id .. "\n" .. name .. "\n")
  86.         file.close()
  87.     end
  88. end
  89.  
  90. function readSaveFile()
  91.     if not fs.exists("saved.txt") then
  92.         createSaveFile()
  93.         readSavedFile()
  94.     else
  95.         local file = fs.open("saved.txt","r")
  96.         local saved = {}
  97.  
  98.         local i = 1
  99.         repeat
  100.             local id = file.readLine()
  101.             local name = file.readLine()
  102.             if id then
  103.                 saved[i] = {Id = id, Name = name}
  104.             end
  105.             i = i + 1
  106.         until id == nil or name == nil
  107.  
  108.         file.close()
  109.         return saved
  110.     end
  111. end
  112.  
  113. function reconstructSaveFile(saveTable)
  114.     if not fs.exists("saved.txt") then
  115.         createSaveFile()
  116.     else
  117.         resetSaveFile()
  118.         local file = fs.open("saved.txt","a")
  119.        
  120.         for _,save in pairs(saveTable) do
  121.             file.write(save.Id .. "\n" .. save.Name .. "\n")
  122.         end
  123.  
  124.         file.close()
  125.     end
  126. end
  127.  
  128. while true do
  129.     term.write("Enter a request: ")
  130.     local request = read()
  131.  
  132.     local play = request
  133.  
  134.     local isRecord, jsonId = isARecord(request)
  135.  
  136.     if isRecord then
  137.         play = jsonId
  138.     elseif request == "stop" then
  139.         speaker.stop()
  140.         play = ""
  141.     elseif request == "volume" then
  142.         volume = promptInput("Enter volume: ")
  143.         play = ""
  144.     elseif request == "pitch" then
  145.         pitch = promptInput("Enter pitch: ")
  146.         play = ""
  147.     elseif request == "exit" then
  148.         break
  149.     elseif request == "save" then
  150.         resetTerm()
  151.  
  152.         local id = promptInput("Save id: ")
  153.         local name = promptInput("Save name: ")
  154.  
  155.         addJsonIdToSaveFile(id,name)
  156.  
  157.         play = ""
  158.        
  159.         resetTerm()
  160.  
  161.         printCenter(10,"Saved!",colors.lime)
  162.  
  163.         speaker.playNote("bit",1,16)
  164.         sleep(0.15)
  165.         speaker.playNote("bit",2,20)
  166.         sleep(0.1)
  167.         speaker.playNote("bit",2,24)
  168.  
  169.         sleep(1)
  170.        
  171.         resetTerm()
  172.     elseif request == "saved" then
  173.         term.clear()
  174.  
  175.         local currentSelected = 1
  176.        
  177.         local SAVED = readSaveFile()
  178.  
  179.         if #SAVED > 0 then
  180.             printCenter(10,"Press up or down arrow")
  181.             printCenter(11,"to continue")
  182.  
  183.             printCenter(12,"You have " .. #SAVED .. " saved song(s)")
  184.  
  185.             while true do
  186.                 local event, key = os.pullEvent("key_up")
  187.                 local name = keys.getName(key) or "not a key"
  188.  
  189.                 if name == "down" then
  190.                     currentSelected = currentSelected + 1
  191.  
  192.                     if currentSelected > #SAVED then
  193.                         currentSelected = 1
  194.                     end
  195.                 elseif name == "up" then
  196.                     currentSelected = currentSelected - 1
  197.  
  198.                     if currentSelected < 1 then
  199.                         currentSelected = #SAVED
  200.                     end
  201.                 end
  202.  
  203.                 if name == "down" or name == "up" then
  204.                     resetTerm()
  205.  
  206.                     printCenter(1,"All saved")
  207.                    
  208.                     for i,save in pairs(SAVED) do
  209.                         if i == currentSelected then
  210.                             printCenter(i+2,"> " .. save.Name .. " <")
  211.                         else
  212.                             printCenter(i+2,save.Name)
  213.                         end
  214.                     end
  215.  
  216.                     printCenter(19,"Press x to exit")
  217.                     printCenter(18,"Press r to remove")
  218.                 elseif name == "enter" then
  219.                     speaker.playSound("block.comparator.click",1)
  220.                     sleep(0.2)
  221.                     playSound(SAVED[currentSelected].Id)
  222.                 elseif name == "r" then
  223.                     resetTerm()
  224.  
  225.                     printCenter(6," Delete?",colors.red)
  226.                     printCenter(10,'"' .. SAVED[currentSelected].Name .. '"',colors.white)
  227.                     printCenter(13,"No")
  228.                     printCenter(14,"Yeah")
  229.  
  230.                     local currentSelected2 = 1
  231.                     local options = {"No","Yeah"}
  232.  
  233.                     while true do
  234.                         local event, key = os.pullEvent("key_up")
  235.                         local name = keys.getName(key) or "not a key"
  236.  
  237.                         if name == "down" then
  238.                             currentSelected2 = currentSelected2 + 1
  239.  
  240.                             if currentSelected2 > #options then
  241.                                 currentSelected2 = 1
  242.                             end
  243.                         elseif name == "up" then
  244.                             currentSelected2 = currentSelected2 - 1
  245.  
  246.                             if currentSelected2 < 1 then
  247.                                 currentSelected2 = #options
  248.                             end
  249.                         end
  250.  
  251.                         if name == "down" or name == "up" then
  252.                             resetTerm()
  253.  
  254.                             printCenter(6, " Delete?",colors.red)
  255.                             printCenter(10,'"' .. SAVED[currentSelected].Name .. '"', colors.white)
  256.                             printCenter(13,"No")
  257.                             printCenter(14,"Yeah")
  258.  
  259.                             for i, option in pairs(options) do
  260.                                 if i == currentSelected2 then
  261.                                     printCenter(i + 12,"> " .. option .. " <", colors.red)
  262.                                 else
  263.                                     printCenter(i + 12,option)
  264.                                 end
  265.                             end
  266.                         elseif name == "enter" then
  267.                             if currentSelected2 == 2 then
  268.                                 local newSAVED = {}
  269.  
  270.                                 for i, save in pairs(SAVED) do
  271.                                     if not (save.Id == SAVED[currentSelected].Id and save.Name == SAVED[currentSelected].Name) then
  272.                                         newSAVED[i] = save
  273.                                     end
  274.                                 end
  275.  
  276.                                 reconstructSaveFile(newSAVED)
  277.  
  278.                                 resetTerm()
  279.  
  280.                                 printCenter(10,"Deleted " .. SAVED[currentSelected].Name,colors.red)
  281.  
  282.                                 speaker.playNote("bit",1,24)
  283.                                 sleep(0.15)
  284.                                 speaker.playNote("bit",2,20)
  285.                                 sleep(0.1)
  286.                                 speaker.playNote("bit",2,16)
  287.  
  288.                                 sleep(1)
  289.  
  290.                                 resetTerm()
  291.                                 SAVED = newSAVED
  292.                                 break
  293.                             else
  294.                                 resetTerm()
  295.                                 break
  296.                             end
  297.                         end
  298.                     end
  299.                 elseif name == "x" then
  300.                     break
  301.                 end
  302.             end
  303.         else
  304.             printCenter(10,"  You don't have any saves",colors.red)
  305.            
  306.             sleep(2)
  307.         end
  308.  
  309.         resetTerm()
  310.         play = ""
  311.     elseif request == "list" then
  312.         term.clear()
  313.  
  314.         printCenter(10,"Press up or down arrow")
  315.         printCenter(11,"to continue")
  316.        
  317.         local currentSelected = 1
  318.  
  319.         while true do
  320.             local event, key = os.pullEvent("key_up")
  321.             local name = keys.getName(key) or "not a key"
  322.  
  323.             if name == "down" then
  324.                 currentSelected = currentSelected + 1
  325.  
  326.                 if currentSelected > #RECORDS then
  327.                     currentSelected = 1
  328.                 end
  329.             elseif name == "up" then
  330.                 currentSelected = currentSelected - 1
  331.  
  332.                 if currentSelected < 1 then
  333.                     currentSelected = #RECORDS
  334.                 end
  335.             end
  336.  
  337.             if name == "down" or name == "up" then
  338.                 term.clear()
  339.                 term.setCursorPos(1,1)
  340.  
  341.                 printCenter(1,"All records: ")
  342.                
  343.                 for i,record in pairs(RECORDS) do
  344.                     if i == currentSelected then
  345.                         printCenter(i+2,"> " .. record[1] .. " <")
  346.                     else
  347.                         printCenter(i+2,record[1],record[2])
  348.                     end
  349.                 end
  350.  
  351.                 printCenter(19,"Press x to exit.")
  352.             elseif name == "enter" then
  353.                 playSound("music_disc." .. RECORDS[currentSelected][1])
  354.             elseif name == "x" then
  355.                 break
  356.             end
  357.         end
  358.  
  359.         term.clear()
  360.         term.setCursorPos(1,1)
  361.         play = ""
  362.     end
  363.  
  364.     playSound(play)
  365. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement