Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save turbulentie/dff671ffa788e4d622b363912343b570 to your computer and use it in GitHub Desktop.
Save turbulentie/dff671ffa788e4d622b363912343b570 to your computer and use it in GitHub Desktop.
Generate CUE from project markers v1.03
-- @description Generate CUE from project markers
-- @version 1.03
-- @author MPL
-- @website https://forum.cockos.com/showthread.php?t=188335
-- @changelog
-- + Add save file dialog (require JS ReaScript API Extension)
function main()
local scr_name = 'MPL Generate CUE from markers'
local _, cnt_markers = reaper.CountProjectMarkers(0)
if not cnt_markers or cnt_markers == 0 then reaper.MB('Add markers to project first', scr_name, 0) return end
reaper.ClearConsole()
local _, user_inputs = reaper.GetUserInputs('Cue', 5,
'Genre,Year,Performer,Album Title,File name (with extension)',
'Other,2016,Performer,Album_Title,FileName.wav')
local fields = {}
for word in user_inputs:gmatch('[^%,]+') do fields[#fields+1] = word end
if #fields ~= 5 then reaper.MB('Empty fields not supported', scr_name, 0) return end
local ext_len = fields[5]:reverse():find('%.')
if not ext_len then reaper.MB('Enter filename with extension', scr_name, 0) return end
local extension = fields[5]:sub(1-ext_len):upper()
out_str =
' REM GENRE '.. fields[1]..
'\n REM DATE '.. fields[2]..
'\n PERFORMER '.. fields[3]..
'\n TITLE '.. fields[4]..
'\n FILE '.. fields[5]..' '..extension..'\n'
ind3 = ' '
ind5 = ' '
for i = 1, cnt_markers do
_, _, posOut, _, nameOut, markrgnindexnumber = reaper.EnumProjectMarkers2(0, i-1)
posOut = reaper.format_timestr_pos(posOut, '', 5)
-- format hours/minutes to minutes
local time = {}
for num in posOut:gmatch('[%d]+') do
if tonumber(num) > 10 then num = tonumber(num) end
time[#time+1] = num
end
if tonumber(time[1]) > 0 then time[2] = tonumber(time[2]) + tonumber(time[1]) * 60 end
perf = fields[3]
posOut = table.concat(time,':',2)
local s_name = nameOut:find('[%-]')
if s_name ~=nil then
perf = nameOut:sub(0, s_name-2)
nameOut1 = nameOut:sub(s_name+2)
end
if nameOut1 == nil or nameOut1 == '' then nameOut1 = 'Untitled '..("%02d"):format(markrgnindexnumber) end
out_str = out_str..ind3..'TRACK '..("%02d"):format(markrgnindexnumber)..' AUDIO'..'\n'..
ind5..'TITLE '..'"'..nameOut1..'"'..'\n'..
ind5..'PERFORMER '..'"'..perf..'"'..'\n'..
ind5..'INDEX 01 '..posOut..'\n'
end
-- write to file
retval0, saving_folder = JS_Dialog_BrowseForSaveFile('Generate CUE file', '', '', ".cue")
if retval0 == 1 then
if not saving_folder:lower():match('%.cue') then saving_folder = saving_folder..'.cue' end
local f = io.open(saving_folder, 'w')
if f then
f:write(out_str)
f:close()
else
msg('(error creating file, here is CUE file content instead)\n'..out_str)
end
end
end
---------------------------------------------------------------------
function CheckFunctions(str_func) local SEfunc_path = reaper.GetResourcePath()..'/Scripts/MPL Scripts/Functions/mpl_Various_functions.lua' local f = io.open(SEfunc_path, 'r') if f then f:close() dofile(SEfunc_path) if not _G[str_func] then reaper.MB('Update '..SEfunc_path:gsub('%\\', '/')..' to newer version', '', 0) else return true end else reaper.MB(SEfunc_path:gsub('%\\', '/')..' missing', '', 0) end end
--------------------------------------------------------------------
local ret = CheckFunctions('VF_CalibrateFont')
local ret2 = VF_CheckReaperVrs(5.95,true)
if ret and ret2 then
if JS_Dialog_BrowseForSaveFile then main() else MB('Missed JS ReaScript API extension', 'Error', 0) end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment