This works okay but loops a section on the end when it changes playback rate, not sure how to avoid that so I just set it to not loop but the length is still added.
Here's some Drums to try
https://www.dropbox.com/s/iyc2il43za...pm120.wav?dl=1
just create a tempo map, drag the wav in, run the script on the selected item, set it to 120.
Here's the Lua
Code:
-- Display a message in the console for debugging
function Msg(variable)
reaper.ShowConsoleMsg(tostring(variable).."\n")
end
cur_pos = reaper.GetCursorPosition()
retval, org_bpm = reaper.GetUserInputs("Set Item's Original Tempo", 1, "Enter item's tempo (bpm):", "" )
if retval then
reaper.Main_OnCommand(40042,0) -- Transport: Go to start of project
tempo_markers_count = reaper.CountTempoTimeSigMarkers(0)
for i = 0, tempo_markers_count - 1 do
reaper.Main_OnCommand(40759,0) --Item: Split items at edit cursor (select right)
retval, timepos, measurepos, beatpos, bpm, timesig_num, timesig_denom, lineartempo = reaper.GetTempoTimeSigMarker(0, i)
item = reaper.GetSelectedMediaItem(0, 0)
take = reaper.GetMediaItemTake(item, 0)
playrate = bpm / org_bpm
reaper.SetMediaItemTakeInfo_Value( take, "D_PLAYRATE", playrate )
reaper.Main_OnCommand(41821,0) --Move edit cursor to next tempo or time signature change
end
reaper.SetMediaItemInfo_Value(item, "B_LOOPSRC", 0)
Info2 = [[
"If you want to glue the items together"
"make sure the end is correct"
"else cancel out and adjust it"
"then Remove fade in and fade out then glue" ]]
reaper.MB(Info2, "Information", 0)
retval,input = reaper.GetUserInputs("Glue Items", 1, "This will glue split item", "")
if retval then
reaper.Main_OnCommand(40421,0) --Item: Select all items in track
reaper.Main_OnCommand(41193,0) --Item: Remove fade in and fade out
reaper.Main_OnCommand(41588,0) --Item: Glue items
end
reaper.SetEditCurPos(cur_pos, 1, 0)
end