Skip to content

Commit 5c26018

Browse files
authored
Release Render whole items in new take v1.3 (#675)
Update : New script in this package to preserve the Take Name
1 parent 6c1312d commit 5c26018

File tree

2 files changed

+68
-2
lines changed

2 files changed

+68
-2
lines changed

Rendering/rodilab_Render whole items in new take.lua

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
-- @description Render whole items in new take
22
-- @author Rodilab
3-
-- @version 1.2
4-
-- @changelog Update : Restore item selection, and Prevent UI Refresh
3+
-- @version 1.3
4+
-- @changelog Update : New script in this package to preserve the Take Name
5+
-- @provides [main] rodilab_Render whole items in new take/rodilab_Render whole items in new take (preserve take name).lua
56
-- @about
67
-- Rend selected items in new takes to apply take FX.
78
-- Rendering applies to the entire source file, in order to enlarge items length later.
89
-- Works only with audio sources (no MIDI).
10+
-- A second script is available in this package to preserve the take name.
911
--
1012
-- by Rodrigo Diaz (aka Rodilab)
1113

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
-- @noindex
2+
3+
local count = reaper.CountSelectedMediaItems(0)
4+
5+
if count > 0 then
6+
reaper.Undo_BeginBlock(0)
7+
reaper.PreventUIRefresh(1)
8+
9+
--Save all selected items in a list
10+
local item_list={}
11+
for i=0, count-1 do
12+
item_list[i+1] = reaper.GetSelectedMediaItem(0,i)
13+
end
14+
15+
--Render each item, one by one
16+
for i, item in ipairs(item_list) do
17+
local take = reaper.GetActiveTake(item)
18+
if take then
19+
--Select only one item
20+
reaper.SelectAllMediaItems(0,0)
21+
reaper.SetMediaItemSelected(item,1)
22+
-- Get item infos
23+
local length = reaper.GetMediaItemInfo_Value(item,"D_LENGTH")
24+
local _,name = reaper.GetSetMediaItemTakeInfo_String(take,"P_NAME","",false)
25+
local startoffs = reaper.GetMediaItemTakeInfo_Value(take,"D_STARTOFFS")
26+
local playrate = reaper.GetMediaItemTakeInfo_Value(take,"D_PLAYRATE")
27+
local source = reaper.GetMediaItemTake_Source(take)
28+
local source_length, lengthIsQN = reaper.GetMediaSourceLength(source)
29+
if lengthIsQN == true then
30+
source_length = reaper.TimeMap_QNToTime(source_length)
31+
end
32+
source_length = source_length/playrate
33+
local samplerate = reaper.GetMediaSourceSampleRate(source)
34+
35+
-- If source is audio file (no midi)
36+
if samplerate > 0 then
37+
-- Set lenght to source
38+
reaper.SetMediaItemInfo_Value(item,"D_LENGTH",source_length )
39+
reaper.SetMediaItemTakeInfo_Value(take,"D_STARTOFFS", 0 )
40+
41+
-- Render item in new take
42+
reaper.Main_OnCommand(41999,0)
43+
44+
-- Trim item
45+
reaper.SetMediaItemInfo_Value(item,"D_LENGTH",length)
46+
reaper.SetMediaItemTakeInfo_Value(take,"D_STARTOFFS",startoffs)
47+
local new_take = reaper.GetActiveTake(item)
48+
reaper.SetMediaItemTakeInfo_Value(new_take,"D_STARTOFFS",startoffs/playrate)
49+
-- Restore take name
50+
reaper.GetSetMediaItemTakeInfo_String(new_take,"P_NAME",name,true)
51+
end
52+
end
53+
end
54+
55+
-- Restore selection
56+
reaper.SelectAllMediaItems(0,0)
57+
for i, item in ipairs(item_list) do
58+
reaper.SetMediaItemSelected(item,1)
59+
end
60+
61+
reaper.Undo_EndBlock("Render whole items in new take (preserve take name)",0)
62+
reaper.PreventUIRefresh(-1)
63+
reaper.UpdateArrange()
64+
end

0 commit comments

Comments
 (0)