I’d like to preface this feature request by saying that Reaper is just awesome! I’m sure most of you know this already! I’ve been using it religiously since I discovered it and the way things are looking I don’t see myself ever switching DAWs again. I’ve gone from FL studio, to Reason, to Ableton, to Cubase and finally after almost 10 years to Reaper. All this to say the Creators/Devs have done a phenomenal job with this one.
Now onto the feature request.
With the advent of Automation Items and by extension Automation Item looping I had a pretty awesome idea to make looping a more universal feature in Reaper. Currently, all items are loop-able which is fantastic for workflow and building “non-destructive” arrangements. Looping basically allows you to workshop a clip or idea across a greater section of the arrangement without over committing to that idea.
Now...
What if you could create a region around a group of Media items that once created, would act as a new type of item called for example “Group Item”. Once created, this Group Item would behave as any other item. (Looping, Pooled copies, Copy/Paste) and a simple double click of the Group Item border would allow you to edit a move its contents. This would allow us to very easily loop or move specific arrangements of media items without over-committing by copy/pasting. These Group Items could behave like automation items in that they wouldn’t destroy or “trim” what’s behind them which lends itself to Reapers non-destructive philosophy.
These Group items would most likely be used in the creation of multi-track one-shot drum arrangements and bunching instrumentation together, they also could serve as a visual and organisational tool to very easily keep track of and move multiple Media Items that belong together. IE: (Vocals, Drums, Synths, Guitars.. etc)
Side note: I have given sub-projects a fair shot when first trying to achieve this myself and there are some very clear limitations that makes using them for this purpose more of a hassle than a “useful shortcut”, which is what this new feature would aim to be.
Here are a few diagrams to illustrate the basic creation and function of these “Group Items”
This diagram illustrates the creation of a "Group Item". This would be a mouse modifier that when done, will select an area in a marquee select fashion and will create the Group Item.
This diagram illustrates how Reaper would treat items when "Group Item" is/isn't in effect. The box on the left would be treated as one item that can be easily copied, pasted, looped, or dragged. The box on the right would be a Group Item that is currently disabled, meaning the contents inside can be edited, changed, or moved around.
This diagram illustrates dragging to loop "Group Items". This, as stated above is useful for adding/moving things efficiently and speeding up workflow.
Thanks for taking the time to read about my feature request. Let me know your thoughts!
I would suggest that the group should also include all automation inside the marquee (that is, all automation underneath as well as *in-between* the items).
I would suggest that the group should also include all automation inside the marquee (that is, all automation underneath as well as *in-between* the items).
)) Sorry for my improper use of this word (in-between)
and, well, words (and symbols) in general...
To include the automation points outside the grouped items (in case you need those points),
I guess, you can create an extra track with an empty, "dummy" item, long enough to include all the needed points, — and add it to the group?
Or can you operate the area itself as an item?
I mean, even if no item touches the area's borders.
To include the automation points outside the grouped items (in case you need those points)
I would suggest that when a group is created, it should include all items and all automation
* inside the time selection.
* of all selected tracks.
By so doing, the group can include non-contiguous tracks, as well as automation from tracks without any items.
(In order to easily select time and (contiguous) tracks together, it would be nice to have a new right-drag mouse modifier in the "Arrange view" context, named "Marquee select tracks and time". EDIT: Or perhaps an all-in-one tool: "Marquee select items, automation, time and tracks".)
Quote:
Originally Posted by AugerJ
I guess, you can create an extra track with an empty, "dummy" item, long enough to include all the needed points, — and add it to the group?
This is exactly the "workaround" that I personally use to duplicate areas, including areas with automation but no items. Use a script to insert empty items across the time selection in all selected tracks, so that "Option: Envelope points move with items" will pick up all the envelope points. After duplicating via Ctrl-drag or copy/paste, the script removes the empty items. Not very elegant, but it gets the job done.
This is exactly the "workaround" that I personally use to duplicate areas, including areas with automation but no items. Use a script to insert empty items across the time selection in all selected tracks, so that "Option: Envelope points move with items" will pick up all the envelope points. After duplicating via Ctrl-drag or copy/paste, the script removes the empty items. Not very elegant, but it gets the job done.
(These are just scripts I made for personal use, so they are not necessarily optimized or bug-free.)
Duplicate items and automation in time selection of selected tracks to edit cursor
* This version is useful if you want to duplicate stuff to new positions in their original tracks.
* Select time and tracks, place edit cursor at paste position, and run script.
* A potential problem is that pre-existing envelope points in the area where the automation is pasted do not get overwritten, so old and new point will be mixed.
Code:
--[[
ReaScript name: js_Duplicate items and automation in time selection of selected tracks to edit cursor.lua
Author: juliansader
Website: http://forum.cockos.com/showthread.php?t=193258
About:
# Description
Copies all items and automation from the time selection of selected tracks to the position of the edit cursor.
All automation, even from tracks without any items, will be copied.
NOTE: A potential problem is that pre-existing envelope points in the area where the automation is pasted will not be overwritten, so old and new points will be mixed.
# Instructions
Select the area to be copied (i.e. select time and tracks), place edit cursor at paste position, and run script.
]]
-------------------------------------------------------------------
-- Do some preliminary checks that selections and API are available
-- Prevent REAPER from automatically creating undo points.
function noUndo()
end
reaper.defer(noUndo)
-- Is a usable time selection available?
timeSelectionStart, timeSelectionEnd = reaper.GetSet_LoopTimeRange2(0, false, false, 0, 0, true)
if timeSelectionStart >= timeSelectionEnd then
return
end
-- Are any tracks selected?
numSelTracks = reaper.CountSelectedTracks(0)
if numSelTracks == 0 then
return
end
-- Is SWS installed?
if not reaper.APIExists("ULT_SetMediaItemNote") then
reaper.ShowMessageBox("This script requires the SWS/S&M extension.\n\nThe SWS/S&M extension can be downloaded from www.sws-extension.org.", "ERROR", 0)
return false
end
-- Checks done, so start undo block.
reaper.Undo_BeginBlock2(0)
reaper.PreventUIRefresh(1)
-----------------------------------------------------------------------------------------------
-- This script manages to duplicate envelope points even when no items are above these points,
-- by inserting temporary empty item across the time selection in all selected tracks.
-- Then, if "Option: Move envelope points with items" is active, REAPER's native item-duplication
-- Actions such as "Item: Copy selected area of items" will copy all envelope points in time selection.
-- This loop also selects all items that overlap time selection, since the Action
-- "Item: Copy selected area of items" only works on selected items.
reaper.SelectAllMediaItems(0, false)
for t = 0, numSelTracks-1 do -- numSelTracks has been defined above
local track = reaper.GetSelectedTrack(0, t)
for i = 0, reaper.GetTrackNumMediaItems(track)-1 do
local item = reaper.GetTrackMediaItem(track, i)
local itemStart = reaper.GetMediaItemInfo_Value(item, "D_POSITION")
local itemEnd = itemStart + reaper.GetMediaItemInfo_Value(item, "D_LENGTH")
if itemStart < timeSelectionEnd and itemEnd > timeSelectionStart then
reaper.SetMediaItemSelected(item, true)
end
end
local newItem = reaper.AddMediaItemToTrack(track)
reaper.SetMediaItemInfo_Value(newItem, "D_POSITION", timeSelectionStart)
reaper.SetMediaItemInfo_Value(newItem, "D_LENGTH", timeSelectionEnd - timeSelectionStart)
-- Will it look better if the items are given a distinctive color?
--reaper.SetMediaItemInfo_Value(newItem, "I_CUSTOMCOLOR", reaper.ColorToNative(0,0,0)|0x01000000)
-- Give temporary items a distinctive note, so that can be found later again.
reaper.ULT_SetMediaItemNote(newItem, "Area select (temporary)")
reaper.SetMediaItemSelected(newItem, true)
end
--------------------------------------------------------------------------
-- Use REAPER's native Actions to duplicate the item slices and automation
-- First, try to find state of "Option: Move envelope points with items" by checking toolbar button
local prevToggleState_MoveEnvPointWithItems = reaper.GetToggleCommandStateEx(0, 40070) -- 0 = Main section; 40070 = Options: Envelope points move with media items
reaper.Main_OnCommandEx(reaper.NamedCommandLookup("_SWS_MVPWIDON"), -1, 0) -- SWS: Set move envelope points with items on
reaper.Main_OnCommandEx(40060, -1, 0) -- Item: Copy selected area of items
reaper.Main_OnCommandEx(40914, -1, 0) -- Track: Set first selected track as last touched track
reaper.Main_OnCommandEx(40058, -1, 0) -- Item: Paste items/tracks
-- Reset state of "Move envelope points with items"
if prevToggleState_MoveEnvPointWithItems == 0 then
reaper.Main_OnCommandEx(reaper.NamedCommandLookup("_SWS_MVPWIDOFF"), -1, 0) -- SWS: Set move envelope points with items off
end
-------------------------
-- Delete temporary items
for t = 0, reaper.CountSelectedTracks(0)-1 do
local track = reaper.GetSelectedTrack(0, t)
local tItems = {}
for i = 0, reaper.GetTrackNumMediaItems(track)-1 do
local item = reaper.GetTrackMediaItem(track, i)
if reaper.ULT_GetMediaItemNote(item) == "Area select (temporary)" then
tItems[#tItems+1] = item
end
end
for _, item in ipairs(tItems) do
reaper.DeleteTrackMediaItem(track, item)
end
end
reaper.UpdateArrange()
reaper.PreventUIRefresh(-1)
reaper.Undo_EndBlock2(0, "Duplicate items and automation", -1)
(EDIT: I added some comments to the scripts, so now they are too long for a single post. Continued in next post...)
Insert temporary empty items in time selection of selected tracks, or delete all temporary items
* This version cycles between inserting temporary empty items in the time selection, and deleting these temporary items.
* When the empty items are inserted, you can Crtl-drag to new position or even other tracks, and pre-existing envelope points will be removed.
Code:
--[[
ReaScript name: js_Insert temporary empty items in time selection of selected tracks, or delete all temporary items.lua
Author: juliansader
Website: http://forum.cockos.com/showthread.php?t=193258
About:
# Description
This script facilitates "Area selection" and "Area copy"; i.e. moving or duplicating all items and automation in the time selection of selected tracks, including automation from tracks without any items.
The script cycles between
1) inserting temporary empty items into the time selection of selected tracks, and
2) deleting all temporary items from the project.
When the temporary items are inserted, Crtl-drag can be used to copy the items and automation to their new position or even to other tracks. Pre-existing envelope points in the paste target area will be overwritten.
# Instructions
1) Select time and tracks
2) Run the script to insert temporary items across the time selection
3) Ctrl-drag the items to their new position
4) Run the script again to remove the (duplicated) temporary items.
]]
-------------------------------------------------------------------
-- Do some preliminary checks that selections and API are available
-- Prevent REAPER from automatically creating undo points.
function noUndo()
end
reaper.defer(noUndo)
-- Is a usable time selection available?
timeSelectionStart, timeSelectionEnd = reaper.GetSet_LoopTimeRange2(0, false, false, 0, 0, true)
if timeSelectionStart >= timeSelectionEnd then
return
end
-- Are any tracks selected?
numSelTracks = reaper.CountSelectedTracks(0)
if numSelTracks == 0 then
return
end
-- Is SWS installed?
if not reaper.APIExists("ULT_SetMediaItemNote") then
reaper.ShowMessageBox("This script requires the SWS/S&M extension.\n\nThe SWS/S&M extension can be downloaded from www.sws-extension.org.", "ERROR", 0)
return false
end
-- Checks done, so start undo block.
reaper.Undo_BeginBlock2(0)
reaper.PreventUIRefresh(1)
-----------------------------------------------------------------------------------------------
-- This script manages to duplicate envelope points even when no items are above these points,
-- by inserting temporary empty item across the time selection in all selected tracks.
-- Then, if "Option: Move envelope points with items" is active, REAPER's native item-duplication
-- Actions such as "Item: Copy selected area of items" will copy all envelope points in time selection.
-- This loop also selects all items that overlap time selection, since the Action
-- "Item: Copy selected area of items" only works on selected items.
function insertEmptyItems()
reaper.SelectAllMediaItems(0, false)
for t = 0, numSelTracks-1 do -- numSelTracks has been defined above
local track = reaper.GetSelectedTrack(0, t)
for i = 0, reaper.GetTrackNumMediaItems(track)-1 do
local item = reaper.GetTrackMediaItem(track, i)
local itemStart = reaper.GetMediaItemInfo_Value(item, "D_POSITION")
local itemEnd = itemStart + reaper.GetMediaItemInfo_Value(item, "D_LENGTH")
if itemStart < timeSelectionEnd and itemEnd > timeSelectionStart then
reaper.SetMediaItemSelected(item, true)
end
end
local newItem = reaper.AddMediaItemToTrack(track)
reaper.SetMediaItemInfo_Value(newItem, "D_POSITION", timeSelectionStart)
reaper.SetMediaItemInfo_Value(newItem, "D_LENGTH", timeSelectionEnd - timeSelectionStart)
-- Will it look better if the items are given a distinctive color?
--reaper.SetMediaItemInfo_Value(newItem, "I_CUSTOMCOLOR", reaper.ColorToNative(0,0,0)|0x01000000)
-- Give temporary items a distinctive note, so that can be found later again.
reaper.ULT_SetMediaItemNote(newItem, "Area select (temporary)")
reaper.SetMediaItemSelected(newItem, true)
end
end
---------------------------
function deleteEmptyItems()
for t = 0, reaper.CountTracks(0)-1 do
local track = reaper.GetTrack(0, t)
local tItems = {}
for i = 0, reaper.GetTrackNumMediaItems(track)-1 do
local item = reaper.GetTrackMediaItem(track, i)
if reaper.ULT_GetMediaItemNote(item) == "Area select (temporary)" then
tItems[#tItems+1] = item
end
end
for _, item in ipairs(tItems) do
reaper.DeleteTrackMediaItem(track, item)
end
end
end
---------------------------------------------------
---------------------------------------------------
-- Check cycle and either add or remove empty items
if reaper.GetExtState("js_Area copy", "Cycle") == "Has inserted" then
deleteEmptyItems()
reaper.SetExtState("js_Area copy", "Cycle", "Has deleted", true)
undoString = "Delete temporary empty items"
else
insertEmptyItems()
reaper.SetExtState("js_Area copy", "Cycle", "Has inserted", true)
undoString = "Insert temporary empty items"
end
reaper.UpdateArrange()
reaper.PreventUIRefresh(-1)
reaper.Undo_EndBlock2(0, undoString, -1)
EDIT 2: I have uploaded the scripts to ReaPack as
js_Area selection - Cycle between inserting and deleting temporary empty items.lua
js_Area selection - Duplicate items and automation in time selection of selected tracks to edit cursor.lua
I really agree with Tristam's suggestion.
I've been using REAPER quite a bit recently and it definitely is missing a few helpful features like this which would only make it greater.
I Think this would be HUGE for reaper, especially to those coming from Ableton Live and Cubase which have great workflow for developing Ideas quickly.
Wellsaid and also exactly my point.
And if i may:
Utterly confusing (especially for Reaper Rookies i think) that drawing a Time Selection
in Ruler doesn't automatically select all Items and Automation Items that are (complete or partly) in that Time Selection.
I mean confusing cause the Time Selection area in Arrange does get another color, against the Arrange color outside the Time Selection area.
So one would/could think that this color change means all Items in Time Selection are selected.
But no, they aren't, the color change is just to make the Time Selection look more "standing out"
I am aware of the fact that you could marquee over items in Arrange which automatically sets time Selection (mouse modifier) but often people wanna draw a Time Selection in Ruler with the intention to select ALL items (plus AI's) on ALL Tracks falling (complete or partly) in that made Time Selection.
And if i may:
Utterly confusing (especially for Reaper Rookies i think) that drawing a Time Selection
in Ruler doesn't automatically select all Items and Automation Items that are (complete or partly) in that Time Selection.
I mean confusing cause the Time Selection area in Arrange does get another color, against the Arrange color outside the Time Selection area.
So one would/could think that this color change means all Items in Time Selection are selected.
But no, they aren't, the color change is just to make the Time Selection look more "standing out"
Exactly as it is in Logic Pro X, Cubase and Studio One.
And it shouldn't confuse anyone, really, because the Marquee Selection is of a different color.
And a selected object/item outside the Time Selection looks differently than an unselected one within the Time Selection, doesn't it?
Quote:
I am aware of the fact that you could marquee over items in Arrange which automatically sets time Selection (mouse modifier) but often people wanna draw a Time Selection in Ruler with the intention to select ALL items (plus AI's) on ALL Tracks falling (complete or partly) in that made Time Selection.
In Pro Tools there's an option for that (which I rarely use) —
Link Timeline and Edit Selection .
isn't this what group in reaper already do?
I don't know how this would work when tracks are invisible or reordered.
this would be like a container for items that enables easy moving and looping of items, while also preventing accidental adjustment to individual items in the group. A literal box around all the items.
ok thanks! still i didn't get how it deals when tracks are reordered anyway to try pushing forward.
i wonder if reaper adds:
- Pooled group copies
- Automatically select/copy all items from group when one item from a group is selected/copied
- black background (or anything) per track defining the edges of the group
Wouldn't it make a very similar thing in reaper?
edit:
- does group have another layer of Fx common for the group?
- is it allowed not grouped items inside a group edges in project arrangement?
ok thanks! still i didn't get how it deals when tracks are reordered.
In PT you could reorder the tracks, the region group would look a little different when there were other tracks between. It also works with hidden tracks.
Right now in reaper you can't edit grouped items on hidden tracks. I've made that mistake a few times.
Quote:
Originally Posted by deeb
- does group have another layer of Fx common for the group?
- is it allowed not grouped items inside a group edges in project arrangement?
personally I don't think an fx chain would be needed in most situations where the group goes across multiple tracks, but on a single track it could be really useful, since there's no easy way to propagate fx changes to multiple items.
I see it as an editing or arrangement function not a mixing thing.
IIRC in pt the region group would split if you put other audio in the middle.
__________________
REAPER Video Tutorials, Tips & Tricks and more at The REAPER Blog
Not really. If you have more than 10 groups it gets utterly confusing.
Generally - for song composing and production we need to work with "repetitive structures".
This would actually solve a workflow issue I have with Reaper for drum editing.
Say I grouped 10 items of drums and did some slicing and editing.
Now I need to manually edit the tom tracks to cut out the dead space in between hits.
When I ungroup the tom tracks, and perform any edits, it's impossible to accurately re-group the edited toms with the other drum tracks.
At this point it's extremely difficult to perform additional time editing, without accidentally leaving behind some tom hits that are no longer part of the original drum item groups.
I could re group all the drum items into one large group; but now I've lost control over the individual hits.
Being able to edit the items as a "Group Item" would maintain the time and phase of the underlying items even if the starts and ends are different.
Desperate to find a solution for this grouping issue ...
Hi Guys,
I spent hours looking for a thread treating this topic and it seems no one else came across this one:
So I desperately try to find a solution for my issue here ...
I would like to keep the grouped items as they are even after removing a part of or splitting one item.
This would be sooooo usefull for editing voice recordings (Podcasts, ...) where I need the tracks to stay aligned to each other.
Example:
- starting with a recording of 2 persons with 2 separate mics ... so 2 tracks
- grouping the 2 Items
- coming across a part where just one track need a split, parts removed, ...
- now the items after this edit are not grouped anymore AND THAT's THE POINT
HOW CAN I KEEP THE ITEMS GROUPED EVEN IF ON ONE OF THE ITEMS I NEED TO SPLIT, REMOVE, ... PARTS ?
THANKS SO MUCH FOR ANY HELP, IDEA, SCRIPT, ...
I hope someone else would find this usefull as well