View Single Post
Old 02-18-2019, 05:08 PM   #128
Human being with feelings
MusoBob's Avatar
Join Date: Sep 2014
Posts: 1,027

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)
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

    -- Display a message in the console for debugging
    function Msg(variable)
    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
    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
    reaper.SetEditCurPos(cur_pos, 1, 0)      

Last edited by MusoBob; 06-25-2019 at 03:44 AM.
MusoBob is offline   Reply With Quote