poulhoi

phoi_Select only mono items on selected tracks.lua

Jan 20th, 2021 (edited)
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.72 KB | None | 0 0
  1. -- USER VARIABLES
  2. local chanTarget = 1 -- number of channels of items that should be selected
  3.  
  4. -- NAME
  5. local scriptName = ({reaper. get_action_context()})[2]:match("([^/\\]+)%.lua$") -- generate default scriptName from file
  6.  
  7. --FUNCTIONS FOR DEBUG
  8. local function msg(s)
  9.     reaper.ShowConsoleMsg(tostring(s) .. "\n")
  10. end
  11.  
  12. --- FUNCTIONS
  13.  
  14. local function unselectAllItems ()
  15.     while (reaper.CountSelectedMediaItems(0) > 0) do
  16.         reaper.SetMediaItemSelected(reaper.GetSelectedMediaItem(0, 0), false)
  17.     end
  18. end
  19.  
  20. local function setItemsSelected (itemsT, unselectOthers) -- zero-indexed table of items as input
  21.     if unselectOthers then unselectAllItems() end
  22.  
  23.     for i = 0, #itemsT do
  24.         local item = itemsT[i]
  25.         if reaper.ValidatePtr(item, "MediaItem*") then
  26.             reaper.SetMediaItemSelected(item, true)
  27.         end
  28.     end
  29. end
  30.    
  31. ----- END OF FUNCTIONS
  32.  
  33. function main()
  34.     reaper.Undo_BeginBlock()
  35.     local targetItems = {}
  36.     local x = 0
  37.     for i = 0, reaper.CountSelectedTracks(0) - 1 do
  38.         local tr = reaper.GetSelectedTrack(0, i)
  39.         for j = 0, reaper.CountTrackMediaItems(tr) - 1 do
  40.             local it = reaper.GetTrackMediaItem(tr, j)
  41.             local tk = reaper.GetActiveTake(it)
  42.             if tk then
  43.                 local src = reaper.GetMediaItemTake_Source(tk)
  44.                 local srcChans = reaper.GetMediaSourceNumChannels(src)
  45.                 if srcChans == chanTarget then -- add item to table if source channels equal to target
  46.                     targetItems[x] = it
  47.                     x = x + 1
  48.                 end
  49.             end
  50.         end
  51.     end
  52.     setItemsSelected(targetItems, true)
  53.     reaper.SetCursorContext( 1, nil ) -- focus arrange
  54.     reaper.Undo_EndBlock(scriptName, -1)
  55. end
  56.  
  57. reaper.PreventUIRefresh(1)
  58. main()
  59. reaper.PreventUIRefresh(-1)
  60. reaper.UpdateArrange()
Add Comment
Please, Sign In to add comment