Old 09-21-2017, 11:56 PM   #1
ausbaxter
Human being with feelings
 
Join Date: Apr 2016
Posts: 39
Default Undo Bug when undoing insert automation items

Hello everyone, long time lurker here, I've made a quick script to add pooled automation to a group of selected items on a single track, unfortunately I cannot get the undo to function properly. After undoing, multiple envelopes will become visible for apparently no reason. I am not affecting envelope visibility in the script so i'm not sure what gives.

Anyone come across this before?



And here's the script:

Code:
num_selItems = reaper.CountSelectedMediaItems(0)
affectedTrack = reaper.GetLastTouchedTrack()
selMediaItems = {}
selEnvelope = reaper.GetSelectedTrackEnvelope(0)

function GetMediaItems()

  for i = 0, num_selItems - 1 do
  
    this_MediaItem = reaper.GetSelectedMediaItem(0, i)
    
    if reaper.GetMediaItemTrack(this_MediaItem) == affectedTrack then
    
      this_MediaItem_Start = reaper.GetMediaItemInfo_Value(this_MediaItem, "D_POSITION")
      this_MediaItem_Length = reaper.GetMediaItemInfo_Value(this_MediaItem, "D_LENGTH")
      
      table.insert(selMediaItems, {this_MediaItem, this_MediaItem_Start, this_MediaItem_Length})      
      
    end
  end
  
  table.sort(selMediaItems, function(a,b) return a[3] < b[3] end)
  
end

function CreateAutomationItems()
  
  for i, item in ipairs(selMediaItems) do
  
    if i == 1 then

      ref_length = item[3]
      
      auto_Item = reaper.InsertAutomationItem(selEnvelope, -1, item[2], item[3])
      
      pool_ID = reaper.GetSetAutomationItemInfo(selEnvelope, auto_Item, "D_POOL_ID", 0, false)
      
    else
    
      local pbkRate = ref_length / item[3]
      
      auto_Item = reaper.InsertAutomationItem(selEnvelope, pool_ID, item[2], item[3]* pbkRate)
      
      reaper.GetSetAutomationItemInfo(selEnvelope, auto_Item, "D_PLAYRATE", pbkRate, true)
      
      reaper.GetSetAutomationItemInfo(selEnvelope, auto_Item, "D_LENGTH", item[3], true)
      
    end
    
    
  end
end

function Main()

  reaper.Undo_BeginBlock()
  reaper.PreventUIRefresh(1)
  
  if selEnvelope ~= nil then
  
    GetMediaItems()
    CreateAutomationItems()
    
    reaper.UpdateArrange()
    
    reaper.Undo_EndBlock("Insert Unpooled Automation Items Under Selected Items On Selected Envelope", -1)
  
  else
  
    reaper.ReaScriptError("Error: Please select an envelope to create automation items on")
  
  end
end

Main()
Thanks for any insight!
ausbaxter is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -7. The time now is 01:29 PM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.