diff --git a/misc/scripts/cuetometa.lua b/misc/scripts/cuetometa.lua new file mode 100755 index 0000000..04ceb07 --- /dev/null +++ b/misc/scripts/cuetometa.lua @@ -0,0 +1,68 @@ +#!/bin/lua + +-- Mixxx CUE sheet to aNONradio metadata +-- And also text tracklist + +local path = arg[1] +local basename = "" + +do + local cur_pos = 1 + for i = 1, path:len() do + local start_pos, end_pos = path:find("/", cur_pos, true) + if not start_pos then break end + + cur_pos = end_pos + 1 + end + + basename = path:sub(cur_pos) +end + +local cuefile = io.open(path) +if not cuefile then + print("Failed to read file.") + os.exit(1) +end + +local content = cuefile:read("a") +cuefile:close() + +if not content:match('FILE "(.-)" MP3\n') then + print("Provided file not a CUE sheet") + os.exit(1) +end + +local meta = "" +local plain = "Archive link: https://archives.anonradio.net/" .. basename:gsub("cue","mp3") .. "\n\n" + +for track in content:gmatch('%s-TRACK %d- AUDIO\n%s-TITLE ".-"\n%s-PERFORMER ".-"\n%s-INDEX %d- %d-:%d+') do + local index = track:match("TRACK (%d-) AUDIO") + local title = track:match('TITLE "(.-)"') + local artist = track:match('PERFORMER "(.-)"') + local time = track:match("INDEX %d- (%d-:%d+)"):gsub(":", "") + + if index == "01" then + time = "0010" + end + + meta = meta .. "00" .. time .. ":" .. artist .. " - " .. title .. "\n" + plain = plain .. artist .. " - " .. title .. "\n" +end + +local metafile = io.open(basename:gsub("cue", "meta"), "w") +local metasucc = metafile:write(meta) +if not metasucc then + print("Failed to write meta file.") +else + metasucc:close() + print("Wrote meta file.") +end + +local plainfile = io.open(basename:gsub("cue", "txt"), "w") +local plainsucc = plainfile:write(plain) +if not plainsucc then + print("Failed to write tracklist file.") +else + plainsucc:close() + print("Wrote tracklist file.") +end