Advertisement
Guest User

cJukebox

a guest
Jun 18th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.67 KB | None | 0 0
  1. activeColors = {["bottom"] = 0, ["left"] = 0, ["right"] = 0, ["top"] = 0, ["back"] = 0}
  2.  
  3.  
  4. function parseNote(iNote, iInstrument) --> iColor, sSide
  5.   bExtra = false
  6.   sSide = ""
  7.   if iNote >= 16 then bExtra = true end
  8.   if not bExtra then
  9.     if iInstrument == 1 then sSide = "bottom" end
  10.     if iInstrument == 2 then sSide = "back" end
  11.     if iInstrument >= 3 then sSide = "right" end
  12.     iColor = 2 ^ iNote
  13.   else
  14.     if iInstrument == 1 then sSide = "top" end
  15.     if iInstrument == 2 then sSide = "left" end
  16.     if iInstrument >= 3 then sSide = "right" end
  17.     iColor = 2 ^ (iNote - 16)
  18.   end
  19.   return iColor, sSide
  20. end
  21.  
  22. function setNoteState(iNote, iInstrument, bState)
  23.   iC, sS = parseNote(iNote, iInstrument)
  24.   if not bState then iC = -iC end
  25.   activeColors[sS] = activeColors[sS] + iC
  26.   rs.setBundledOutput(sS, activeColors[sS])
  27. end
  28.  
  29. function playNotes(iLen, tNotes)
  30.   for k, v in pairs(tNotes) do
  31.     if v[1] ~= nil and v[2] ~= nil then
  32.       print("Playing " .. v[1] .. " " .. v[2])
  33.       setNoteState(v[1], v[2], true)
  34.     end
  35.   end
  36.   sleep(tonumber(iLen)/2)
  37.   for k, v in pairs(tNotes) do
  38.     if v[1] ~= nil and v[2] ~= nil then
  39.       setNoteState(v[1], v[2], false)
  40.     end
  41.   end
  42.   sleep(tonumber(iLen)/2)
  43. end
  44.  
  45. function interpretLine(sLine) -->iLen, tNotes
  46.   local sLineN, iFind, iSec1, iSec2, iTaken, tRet
  47.   tRet = {}
  48.   iLen1 = sLine:find(";")
  49.   if iLen1 == nil then error("no ; found. Maybe : used instead in file?") end
  50.   iLen = sLine:sub(1,iLen1 - 1)
  51.   sLineN = sLine:sub(iLen1 + 1)
  52.   iTaken = iLen1
  53.   --print("sLine: " .. sLine)
  54.   --print("iTaken: " .. iTaken)
  55.   while sLineN ~= "" do
  56.     iFind = sLineN:find(":")
  57.     iFindk = sLineN:find(",")
  58.     if iFind == nil or iFindk == nil then break end
  59.     iFind = iFind - iTaken
  60.     iFindk = iFindk - iTaken
  61.     iSec1 = sLineN:sub(1, iFindk - 1)
  62.     iSec2 = sLineN:sub(iFindk + 1, iFind - 1)
  63.     --print("sLineN: " .. sLineN)
  64.     --print("sFind: " .. iFind)
  65.     --print("sFindk: " .. iFindk)
  66.     --print("iSec1: " .. iSec1)
  67.     --print("iSec2: " .. iSec2)
  68.     tTemp = {tonumber(iSec1), tonumber(iSec2)}
  69.     table.insert(tRet, tTemp)
  70.     sLineN = sLineN:sub(iFind + 1)
  71.     iTaken = iTaken + iFind
  72.   end
  73.   return iLen, tRet
  74. end
  75.  
  76. function interpretFile(sFile)
  77.   file = fs.open(sFile, "r")
  78.   if file == nil then return error("invalid file") end
  79.   repeat
  80.     sLine = file.readLine()
  81.     if sLine ~= nil then
  82.       iLen, tNotes = interpretLine(sLine)
  83.       print(textutils.serialize(tNotes))
  84.       playNotes(iLen, tNotes)
  85.     end
  86.   until sLine == nil
  87. end
  88.  
  89. interpretFile("testsong")
  90.  
  91. length, notes = interpretLine("1.2;3,4:5,6:7,8:9,0")
  92. print(length)
  93. print(textutils.serialize(notes))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement