This will fit any item to the tempo map but loops/lengthens a section (or shortens if going down in tempo) 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, so just adjust it manually before gluing.
Here's some Drums to try (there's no embedded tempo though it will work with embedded tempo also)
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 script
EDIT: Updated
Here's an updated script to try, just set the item on the start beat, run the script and set the items original tempo in the popup.
Let me know if it works for you.
right click Save Link/Target As
ReaTrak set item bpm and fit to project tempo map.lua
Watch Video
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