Created
May 19, 2023 11:33
-
-
Save turbulentie/dff671ffa788e4d622b363912343b570 to your computer and use it in GitHub Desktop.
Generate CUE from project markers v1.03
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- @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