Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local speaker = peripheral.find("speaker")
- term.clear()
- term.setCursorPos(1,1)
- function promptInput(promptText)
- term.write(promptText)
- return read()
- end
- local volume = promptInput("Enter volume: ")
- local pitch = promptInput("Enter pitch: ")
- function playSound(soundPath)
- if soundPath and soundPath ~= "" then
- speaker.playSound(soundPath,tonumber(volume) or 1,tonumber(pitch) or 1)
- end
- end
- local RECORDS = {
- {"11",colors.brown},
- {"13",colors.red},
- {"blocks",colors.orange},
- {"cat",colors.yellow},
- {"chirp",colors.lime},
- {"far",colors.green},
- {"mall",colors.cyan},
- {"mellohi",colors.lightBlue},
- {"pigstep",colors.blue},
- {"stal",colors.purple},
- {"strad",colors.magenta},
- {"wait",colors.pink},
- {"ward",colors.red}
- }
- function isARecord(str)
- for i,record in pairs(RECORDS) do
- if str == record[1] then
- return true, "music_disc." .. str
- end
- end
- return false
- end
- function printCenter(y, str, col)
- term.setTextColor(col or colors.white)
- local x = math.floor((26 - string.len(str)) / 2)
- term.setCursorPos(x,y)
- term.clearLine()
- term.write(str)
- end
- function resetTerm()
- term.setCursorPos(1,1)
- term.clear()
- term.setTextColor(colors.white)
- end
- function createSaveFile()
- if not fs.exists("saved.txt") then
- local file = fs.open("saved.txt","w")
- file.write("")
- file.close()
- end
- end
- function resetSaveFile()
- if not fs.exists("saved.txt") then
- createSaveFile()
- else
- local file = fs.open("saved.txt","w")
- file.write("")
- file.close()
- end
- end
- function addJsonIdToSaveFile(id,name)
- if not fs.exists("saved.txt") then
- createSaveFile()
- addJsonIdToSavedFile(id,name)
- else
- local file = fs.open("saved.txt","a")
- file.write(id .. "\n" .. name .. "\n")
- file.close()
- end
- end
- function readSaveFile()
- if not fs.exists("saved.txt") then
- createSaveFile()
- readSavedFile()
- else
- local file = fs.open("saved.txt","r")
- local saved = {}
- local i = 1
- repeat
- local id = file.readLine()
- local name = file.readLine()
- if id then
- saved[i] = {Id = id, Name = name}
- end
- i = i + 1
- until id == nil or name == nil
- file.close()
- return saved
- end
- end
- function reconstructSaveFile(saveTable)
- if not fs.exists("saved.txt") then
- createSaveFile()
- else
- resetSaveFile()
- local file = fs.open("saved.txt","a")
- for _,save in pairs(saveTable) do
- file.write(save.Id .. "\n" .. save.Name .. "\n")
- end
- file.close()
- end
- end
- while true do
- term.write("Enter a request: ")
- local request = read()
- local play = request
- local isRecord, jsonId = isARecord(request)
- if isRecord then
- play = jsonId
- elseif request == "stop" then
- speaker.stop()
- play = ""
- elseif request == "volume" then
- volume = promptInput("Enter volume: ")
- play = ""
- elseif request == "pitch" then
- pitch = promptInput("Enter pitch: ")
- play = ""
- elseif request == "exit" then
- break
- elseif request == "save" then
- resetTerm()
- local id = promptInput("Save id: ")
- local name = promptInput("Save name: ")
- addJsonIdToSaveFile(id,name)
- play = ""
- resetTerm()
- printCenter(10,"Saved!",colors.lime)
- speaker.playNote("bit",1,16)
- sleep(0.15)
- speaker.playNote("bit",2,20)
- sleep(0.1)
- speaker.playNote("bit",2,24)
- sleep(1)
- resetTerm()
- elseif request == "saved" then
- term.clear()
- local currentSelected = 1
- local SAVED = readSaveFile()
- if #SAVED > 0 then
- printCenter(10,"Press up or down arrow")
- printCenter(11,"to continue")
- printCenter(12,"You have " .. #SAVED .. " saved song(s)")
- while true do
- local event, key = os.pullEvent("key_up")
- local name = keys.getName(key) or "not a key"
- if name == "down" then
- currentSelected = currentSelected + 1
- if currentSelected > #SAVED then
- currentSelected = 1
- end
- elseif name == "up" then
- currentSelected = currentSelected - 1
- if currentSelected < 1 then
- currentSelected = #SAVED
- end
- end
- if name == "down" or name == "up" then
- resetTerm()
- printCenter(1,"All saved")
- for i,save in pairs(SAVED) do
- if i == currentSelected then
- printCenter(i+2,"> " .. save.Name .. " <")
- else
- printCenter(i+2,save.Name)
- end
- end
- printCenter(19,"Press x to exit")
- printCenter(18,"Press r to remove")
- elseif name == "enter" then
- speaker.playSound("block.comparator.click",1)
- sleep(0.2)
- playSound(SAVED[currentSelected].Id)
- elseif name == "r" then
- resetTerm()
- printCenter(6," Delete?",colors.red)
- printCenter(10,'"' .. SAVED[currentSelected].Name .. '"',colors.white)
- printCenter(13,"No")
- printCenter(14,"Yeah")
- local currentSelected2 = 1
- local options = {"No","Yeah"}
- while true do
- local event, key = os.pullEvent("key_up")
- local name = keys.getName(key) or "not a key"
- if name == "down" then
- currentSelected2 = currentSelected2 + 1
- if currentSelected2 > #options then
- currentSelected2 = 1
- end
- elseif name == "up" then
- currentSelected2 = currentSelected2 - 1
- if currentSelected2 < 1 then
- currentSelected2 = #options
- end
- end
- if name == "down" or name == "up" then
- resetTerm()
- printCenter(6, " Delete?",colors.red)
- printCenter(10,'"' .. SAVED[currentSelected].Name .. '"', colors.white)
- printCenter(13,"No")
- printCenter(14,"Yeah")
- for i, option in pairs(options) do
- if i == currentSelected2 then
- printCenter(i + 12,"> " .. option .. " <", colors.red)
- else
- printCenter(i + 12,option)
- end
- end
- elseif name == "enter" then
- if currentSelected2 == 2 then
- local newSAVED = {}
- for i, save in pairs(SAVED) do
- if not (save.Id == SAVED[currentSelected].Id and save.Name == SAVED[currentSelected].Name) then
- newSAVED[i] = save
- end
- end
- reconstructSaveFile(newSAVED)
- resetTerm()
- printCenter(10,"Deleted " .. SAVED[currentSelected].Name,colors.red)
- speaker.playNote("bit",1,24)
- sleep(0.15)
- speaker.playNote("bit",2,20)
- sleep(0.1)
- speaker.playNote("bit",2,16)
- sleep(1)
- resetTerm()
- SAVED = newSAVED
- break
- else
- resetTerm()
- break
- end
- end
- end
- elseif name == "x" then
- break
- end
- end
- else
- printCenter(10," You don't have any saves",colors.red)
- sleep(2)
- end
- resetTerm()
- play = ""
- elseif request == "list" then
- term.clear()
- printCenter(10,"Press up or down arrow")
- printCenter(11,"to continue")
- local currentSelected = 1
- while true do
- local event, key = os.pullEvent("key_up")
- local name = keys.getName(key) or "not a key"
- if name == "down" then
- currentSelected = currentSelected + 1
- if currentSelected > #RECORDS then
- currentSelected = 1
- end
- elseif name == "up" then
- currentSelected = currentSelected - 1
- if currentSelected < 1 then
- currentSelected = #RECORDS
- end
- end
- if name == "down" or name == "up" then
- term.clear()
- term.setCursorPos(1,1)
- printCenter(1,"All records: ")
- for i,record in pairs(RECORDS) do
- if i == currentSelected then
- printCenter(i+2,"> " .. record[1] .. " <")
- else
- printCenter(i+2,record[1],record[2])
- end
- end
- printCenter(19,"Press x to exit.")
- elseif name == "enter" then
- playSound("music_disc." .. RECORDS[currentSelected][1])
- elseif name == "x" then
- break
- end
- end
- term.clear()
- term.setCursorPos(1,1)
- play = ""
- end
- playSound(play)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement