 |
|
|
07-19-2022, 10:21 AM
|
#1
|
Human being with feelings
Join Date: Nov 2012
Location: West Midlands, UK
Posts: 368
|
v6.64+dev0719 - July 19 2022
v6.64+dev0719 - July 19 2022
- * Includes feature branch: track media/razor edit grouping
- * Includes feature branch: pan law/function improvements
- * Includes feature branch: improve experimental silent-track CPU reduction option to include FX tail length
- * Includes feature branch: media item fixed lanes
- * Includes feature branch: internal pin management overhaul for future extension
- + Media items: fix flickering when moving media items across tracks and "automatically display affected envelopes" is enabled
- + Razor edits: ignore razor edit areas on envelopes when running action to crossfade media items [p=2579146]
- + Track grouping: improve grouping of razor edits on tracks with different numbers of fixed lanes
- # Actions: deselect unaffected items on the not-selected side of the split when running action to split items selecting left or right [p=2578578]
This thread is for pre-release features discussion. Use the Feature Requests forum for other requests.
Changelog - Pre-Releases
Generated by X-Raym's REAPER ChangeLog to BBCode
|
|
|
07-19-2022, 10:55 AM
|
#2
|
Moderator
Join Date: Aug 2007
Location: Caracas, Venezuela
Posts: 8,666
|
I don't know why but REAPER rescanned all my plug-ins with this new pre.
__________________
Pressure is what turns coal into diamonds - Michael a.k.a. Runaway
|
|
|
07-19-2022, 11:43 AM
|
#3
|
Human being with feelings
Join Date: Sep 2021
Location: Berlin
Posts: 1,749
|
Quote:
- # Actions: deselect unaffected items on the not-selected side of the split when running action to split items selecting left or right [p=2578578]
|
I don't want to jinx it, but as far as I can tell, the splitting behavior is perfect now.
My macOS REAPER didn't rescan all my plugins FWIW.
Thank you!
|
|
|
07-19-2022, 12:03 PM
|
#4
|
Human being with feelings
Join Date: Jun 2009
Location: Croatia
Posts: 4,373
|
Yeah its really nice now!
Lane selection is good!
This one is still here:
Shift + S , Delete or Cut
EDIT: The problem seems to be when you do initial Split selection (Shift + S) then it also creates the little item on crossfade section
Last edited by Sexan; 07-19-2022 at 12:13 PM.
|
|
|
07-19-2022, 12:13 PM
|
#5
|
Administrator
Join Date: Mar 2007
Location: NY
Posts: 15,429
|
Why not just cut or delete in that scenario instead of splitting first?
|
|
|
07-19-2022, 12:14 PM
|
#6
|
Human being with feelings
Join Date: Jun 2009
Location: Croatia
Posts: 4,373
|
Quote:
Originally Posted by schwa
Why not just cut or delete in that scenario instead of splitting first?
|
Just doing weird stuff for bug hunt (normally I would do that). But the problem is that SPLIT is doing that not delete or cut which I thought

It creates additional item
Last edited by Sexan; 07-19-2022 at 12:21 PM.
|
|
|
07-19-2022, 12:23 PM
|
#7
|
Administrator
Join Date: Mar 2007
Location: NY
Posts: 15,429
|
Actually... I can't reproduce that. Does it happen for you without grouping the tracks?
[edit] never mind, got it!
|
|
|
07-19-2022, 12:27 PM
|
#8
|
Human being with feelings
Join Date: Jun 2009
Location: Croatia
Posts: 4,373
|
Quote:
Originally Posted by schwa
Actually... I can't reproduce that. Does it happen for you without grouping the tracks?
|
Yeah that above is new clean project with just 1 track without grouping. Maybe this is the problem?
EDIT: yeah it is
|
|
|
07-19-2022, 10:52 PM
|
#9
|
Human being with feelings
Join Date: Jan 2016
Location: Los Angeles, CA
Posts: 2,991
|
Grouping looks so great!
Wondering - any plans for "temporary grouping"?
There's many situations where you don't want to create formal groups, as you need to edit stuff together one time, or temporarily.
Reaper already does this with Volume Faders -- if you select multiple tracks and pull a fader, they all come down together. It's easy to forget that this is basically ad-hoc grouping of the Volume Fader.
This exact behavior, but for Volume Envelopes, Mutes etc, could make a lot of sense for those "let me quickly dip the volume on these 7 tracks" type situations, which comes up All the time.
example : select tracks, engage "ad hoc grouping", now any track-based adjustments (shared volume envelope trims/draws/deletes/stretches) happen together. Disengage ad hoc grouping when done.
Last edited by ferropop; 07-19-2022 at 10:58 PM.
|
|
|
07-19-2022, 11:05 PM
|
#10
|
Human being with feelings
Join Date: Sep 2021
Location: Berlin
Posts: 1,749
|
Quote:
Originally Posted by ferropop
Grouping looks so great!
Wondering - any plans for "temporary grouping"?
There's many situations where you don't want to create formal groups, as you need to edit stuff together one time, or temporarily.
Reaper already does this with Volume Faders -- if you select multiple tracks and pull a fader, they all come down together. It's easy to forget that this is basically ad-hoc grouping of the Volume Fader.
This exact behavior, but for Volume Envelopes, Mutes etc, could make a lot of sense for those "let me quickly dip the volume on these 7 tracks" type situations, which comes up All the time.
|
I don't want to push my luck this dev cycle, but I'm going to +1 this, with the qualification that I don't think temporary groups should be automatic (like with volume faders). I guess this is something easy enough for an intrepid scripter to do, though, since the building blocks are basically there[*].
I have a question about those actions, though ("Track: Create track media/razor editing group from selected tracks" and "Track: Remove selected tracks from track media/razor editing groups"). It looks like they use the first unused (empty) group to do their thing -- is that the case? Is there any way to influence which group is used (always Group 64, for instance)?
I guess that my only wish[*] would be to have this notional temporary group outside of the 64-group system, only for track media/razor editing, so that it would always have the same color and work the same way regardless of what else is happening in groupville. Actually...
[*] I guess what the benefit of the "temp group" would be is that you wouldn't need to have to reselect the tracks to remove the group, which you have to do now. You could just clear or remake the temp group and it's done. You only get one.
Again, the intrepid scripter could probably manage all of this herself (always use group 64, cache which tracks are currently in the group, etc.). It would be a useful addition to the built-in feature, though.
EDIT: putting my money where my mouth is, here's a script to do it using Group 64. It might be nice to make this script work on the basis of selected media items rather than selected tracks, maybe later...
Code:
-- @description Create a "temporary" track media/razor edit group in Group 64
-- @author sockmonkey72
-- @version 1.0
-- @changelog 1.0 initial upload
function selectionIdenticalToExtState(extTrackGUIDs)
local rv = false
local selTrkCount = reaper.CountSelectedTracks(0)
if selTrkCount > 0 then
local sameSelection = true
for i = 0, selTrkCount - 1 do
local trk = reaper.GetSelectedTrack(0, i)
if trk ~= 0 then
local trkGUID = reaper.GetTrackGUID(trk)
local found = false
for _, guid in pairs(extTrackGUIDs) do
if guid == trkGUID then
found = true
break
end
end
if found == false then
sameSelection = false
break
end
end
end
if sameSelection == true then rv = true end
end
return rv
end
function removeTrackEditGroupFromAllTracks()
local rv = false
local numTracks = reaper.CountTracks(0)
for i = 0, numTracks - 1 do
local trk = reaper.GetTrack(0, i)
if trk ~= 0 then
local state1 = reaper.GetSetTrackGroupMembershipHigh(trk, "ITEM_EDIT_LEAD", 0, 0)
local state2 = reaper.GetSetTrackGroupMembershipHigh(trk, "ITEM_EDIT_FOLLOW", 0, 0)
if state1 & (1 << 31) ~= 0 or state2 & (1 << 31) ~= 0 then
reaper.GetSetTrackGroupMembershipHigh(trk, "ITEM_EDIT_LEAD", 1 << 31, 0)
reaper.GetSetTrackGroupMembershipHigh(trk, "ITEM_EDIT_FOLLOW", 1 << 31, 0)
rv = true
end
end
end
return rv;
end
function createTrackEditGroupFromSelection()
local rv = false
local trackGUIDs = {}
local selTrkCount = reaper.CountSelectedTracks(0)
for i = 0, selTrkCount - 1 do
local trk = reaper.GetSelectedTrack(0, i)
if trk ~= 0 then
reaper.GetSetTrackGroupMembershipHigh(trk, "ITEM_EDIT_LEAD", 1 << 31, 1 << 31)
reaper.GetSetTrackGroupMembershipHigh(trk, "ITEM_EDIT_FOLLOW", 1 << 31, 1 << 31)
trackGUIDs[#trackGUIDs + 1] = reaper.GetTrackGUID(trk)
rv = true
end
end
return rv, trackGUIDs
end
-----------------------------------------------------------
-----------------------------------------------------------
reaper.PreventUIRefresh(1)
local undoStarted = false
local removed = false
local created = false
local onlyRemove = false
local _, extState = reaper.GetProjExtState(0, "sm72_tempTrackEditGroup", "tracks")
if extState ~= "" then
local extTrackGUIDs = {}
undoStarted = true
reaper.Undo_BeginBlock2(0)
for guid in string.gmatch(extState, "[^,]+") do
extTrackGUIDs[#extTrackGUIDs + 1] = guid
end
if #extTrackGUIDs > 0 then -- only delete stuff if we were responsible for it
onlyRemove = selectionIdenticalToExtState(extTrackGUIDs)
removed = removeTrackEditGroupFromAllTracks()
end
reaper.SetProjExtState(0, "sm72_tempTrackEditGroup", "", "")
end
-- for extra credit we could check whether Group 64 is in use and bail here if so
-- not doing because I am lazy
local selTrkCount = reaper.CountSelectedTracks(0)
if onlyRemove == false and selTrkCount > 0 then
if undoStarted == false then reaper.Undo_BeginBlock2(0) end
undoStarted = true;
local trackGUIDs
created, trackGUIDs = createTrackEditGroupFromSelection()
if #trackGUIDs > 0 then
reaper.SetProjExtState(0, "sm72_tempTrackEditGroup", "tracks", table.concat(trackGUIDs, ","))
end
end
local description = "Temp Edit Group"
if undoStarted == true then
if removed == true and created == true then
description = "Update Temp Edit Group"
elseif removed == true then
description = "Delete Temp Edit Group"
elseif created == true then
description = "Create Temp Edit Group"
end
reaper.Undo_EndBlock2(0, description, -1)
end
reaper.TrackList_AdjustWindows(false)
reaper.PreventUIRefresh(-1)
Last edited by sockmonkey72; 07-20-2022 at 01:53 AM.
|
|
|
07-20-2022, 05:47 AM
|
#11
|
Human being with feelings
Join Date: Sep 2015
Location: Paris
Posts: 495
|
Could it be possible to have more toolbar slots, please, it was discussed in a schwa youtube stream month ago, he said it was do-able and that someone had to ask for it in the pre release updates forum to remind him. Thanks !
|
|
|
07-20-2022, 06:02 AM
|
#12
|
Human being with feelings
Join Date: Sep 2021
Location: Berlin
Posts: 1,749
|
Quote:
Originally Posted by sockmonkey72
It might be nice to make this script work on the basis of selected media items rather than selected tracks, maybe later...
|
Later is now, maybe someone will find this useful, either to use or as a prototype:
Code:
-- @description Create a "temporary" track media/razor edit group in Group 64
-- @author sockmonkey72
-- @version 1.0
-- @changelog 1.0 initial upload
tracksForItems = {}
tracksForItemsCount = 0;
function addTrackToTable(trk)
if trk then
local guid = reaper.GetTrackGUID(trk)
if tracksForItems[guid] == nil then
tracksForItems[guid] = trk
tracksForItemsCount = tracksForItemsCount + 1
end
end
end
-- add selected items AND selected tracks
function populateTracksForItems()
local selectedMediaItems = reaper.CountSelectedMediaItems(0)
for i = 0, selectedMediaItems - 1 do
local item = reaper.GetSelectedMediaItem(0, i)
if item then
addTrackToTable(reaper.GetMediaItem_Track(item))
end
end
local selectedTracks = reaper.CountSelectedTracks(0)
for i = 0, selectedTracks - 1 do
addTrackToTable(reaper.GetSelectedTrack(0, i))
end
return tracksForItems
end
function selectionIdenticalToExtState(extTrackGUIDs)
local rv = false
local sameSelection = true
if #extTrackGUIDs ~= tracksForItemsCount then return false end
for trkGUID, trk in pairs(tracksForItems) do
local found = false
for _, guid in pairs(extTrackGUIDs) do
if guid == trkGUID then
found = true
break
end
end
if found == false then
sameSelection = false
break
end
end
if sameSelection == true then rv = true end
return rv
end
function removeTrackEditGroupFromAllTracks()
local rv = false
local numTracks = reaper.CountTracks(0)
for i = 0, numTracks - 1 do
local trk = reaper.GetTrack(0, i)
if trk then
local state1 = reaper.GetSetTrackGroupMembershipHigh(trk, "MEDIA_EDIT_LEAD", 0, 0)
local state2 = reaper.GetSetTrackGroupMembershipHigh(trk, "MEDIA_EDIT_FOLLOW", 0, 0)
if state1 & (1 << 31) ~= 0 or state2 & (1 << 31) ~= 0 then
reaper.GetSetTrackGroupMembershipHigh(trk, "MEDIA_EDIT_LEAD", 1 << 31, 0)
reaper.GetSetTrackGroupMembershipHigh(trk, "MEDIA_EDIT_FOLLOW", 1 << 31, 0)
rv = true
end
end
end
return rv;
end
function createTrackEditGroupFromSelection()
local rv = false
local trackGUIDs = {}
for trkGUID, trk in pairs(tracksForItems) do
reaper.GetSetTrackGroupMembershipHigh(trk, "MEDIA_EDIT_LEAD", 1 << 31, 1 << 31)
reaper.GetSetTrackGroupMembershipHigh(trk, "MEDIA_EDIT_FOLLOW", 1 << 31, 1 << 31)
trackGUIDs[#trackGUIDs + 1] = trkGUID
rv = true
end
return rv, trackGUIDs
end
-----------------------------------------------------------
-----------------------------------------------------------
reaper.PreventUIRefresh(1)
local removed = false
local created = false
local onlyRemove = false
populateTracksForItems()
reaper.Undo_BeginBlock2(0)
local _, extState = reaper.GetProjExtState(0, "sm72_tempTrackEditGroup", "tracks")
if extState ~= "" then
local extTrackGUIDs = {}
for guid in string.gmatch(extState, "[^,]+") do
extTrackGUIDs[#extTrackGUIDs + 1] = guid
end
if #extTrackGUIDs > 0 then -- only delete stuff if we were responsible for it
onlyRemove = selectionIdenticalToExtState(extTrackGUIDs)
removed = removeTrackEditGroupFromAllTracks()
end
reaper.SetProjExtState(0, "sm72_tempTrackEditGroup", "", "")
end
-- for extra credit we could check whether Group 64 is in use and bail here if so
-- not doing because I am lazy
if onlyRemove == false and tracksForItemsCount > 0 then
local trackGUIDs
created, trackGUIDs = createTrackEditGroupFromSelection()
if #trackGUIDs > 0 then
reaper.SetProjExtState(0, "sm72_tempTrackEditGroup", "tracks", table.concat(trackGUIDs, ","))
end
end
local description = "Temp Edit Group"
if removed == true and created == true then
description = "Update Temp Edit Group"
elseif removed == true then
description = "Delete Temp Edit Group"
elseif created == true then
description = "Create Temp Edit Group"
end
reaper.Undo_EndBlock2(0, description, -1)
reaper.TrackList_AdjustWindows(false)
reaper.PreventUIRefresh(-1)
Last edited by sockmonkey72; 07-20-2022 at 02:28 PM.
Reason: updated to work with +dev0720
|
|
|
07-20-2022, 06:36 PM
|
#13
|
Human being with feelings
Join Date: Jan 2016
Location: Los Angeles, CA
Posts: 2,991
|
Quote:
Originally Posted by sockmonkey72
Later is now, maybe someone will find this useful, either to use or as a prototype:
Code:
-- @description Create a "temporary" track media/razor edit group in Group 64
-- @author sockmonkey72
-- @version 1.0
-- @changelog 1.0 initial upload
tracksForItems = {}
tracksForItemsCount = 0;
function addTrackToTable(trk)
if trk then
local guid = reaper.GetTrackGUID(trk)
if tracksForItems[guid] == nil then
tracksForItems[guid] = trk
tracksForItemsCount = tracksForItemsCount + 1
end
end
end
-- add selected items AND selected tracks
function populateTracksForItems()
local selectedMediaItems = reaper.CountSelectedMediaItems(0)
for i = 0, selectedMediaItems - 1 do
local item = reaper.GetSelectedMediaItem(0, i)
if item then
addTrackToTable(reaper.GetMediaItem_Track(item))
end
end
local selectedTracks = reaper.CountSelectedTracks(0)
for i = 0, selectedTracks - 1 do
addTrackToTable(reaper.GetSelectedTrack(0, i))
end
return tracksForItems
end
function selectionIdenticalToExtState(extTrackGUIDs)
local rv = false
local sameSelection = true
if #extTrackGUIDs ~= tracksForItemsCount then return false end
for trkGUID, trk in pairs(tracksForItems) do
local found = false
for _, guid in pairs(extTrackGUIDs) do
if guid == trkGUID then
found = true
break
end
end
if found == false then
sameSelection = false
break
end
end
if sameSelection == true then rv = true end
return rv
end
function removeTrackEditGroupFromAllTracks()
local rv = false
local numTracks = reaper.CountTracks(0)
for i = 0, numTracks - 1 do
local trk = reaper.GetTrack(0, i)
if trk then
local state1 = reaper.GetSetTrackGroupMembershipHigh(trk, "MEDIA_EDIT_LEAD", 0, 0)
local state2 = reaper.GetSetTrackGroupMembershipHigh(trk, "MEDIA_EDIT_FOLLOW", 0, 0)
if state1 & (1 << 31) ~= 0 or state2 & (1 << 31) ~= 0 then
reaper.GetSetTrackGroupMembershipHigh(trk, "MEDIA_EDIT_LEAD", 1 << 31, 0)
reaper.GetSetTrackGroupMembershipHigh(trk, "MEDIA_EDIT_FOLLOW", 1 << 31, 0)
rv = true
end
end
end
return rv;
end
function createTrackEditGroupFromSelection()
local rv = false
local trackGUIDs = {}
for trkGUID, trk in pairs(tracksForItems) do
reaper.GetSetTrackGroupMembershipHigh(trk, "MEDIA_EDIT_LEAD", 1 << 31, 1 << 31)
reaper.GetSetTrackGroupMembershipHigh(trk, "MEDIA_EDIT_FOLLOW", 1 << 31, 1 << 31)
trackGUIDs[#trackGUIDs + 1] = trkGUID
rv = true
end
return rv, trackGUIDs
end
-----------------------------------------------------------
-----------------------------------------------------------
reaper.PreventUIRefresh(1)
local removed = false
local created = false
local onlyRemove = false
populateTracksForItems()
reaper.Undo_BeginBlock2(0)
local _, extState = reaper.GetProjExtState(0, "sm72_tempTrackEditGroup", "tracks")
if extState ~= "" then
local extTrackGUIDs = {}
for guid in string.gmatch(extState, "[^,]+") do
extTrackGUIDs[#extTrackGUIDs + 1] = guid
end
if #extTrackGUIDs > 0 then -- only delete stuff if we were responsible for it
onlyRemove = selectionIdenticalToExtState(extTrackGUIDs)
removed = removeTrackEditGroupFromAllTracks()
end
reaper.SetProjExtState(0, "sm72_tempTrackEditGroup", "", "")
end
-- for extra credit we could check whether Group 64 is in use and bail here if so
-- not doing because I am lazy
if onlyRemove == false and tracksForItemsCount > 0 then
local trackGUIDs
created, trackGUIDs = createTrackEditGroupFromSelection()
if #trackGUIDs > 0 then
reaper.SetProjExtState(0, "sm72_tempTrackEditGroup", "tracks", table.concat(trackGUIDs, ","))
end
end
local description = "Temp Edit Group"
if removed == true and created == true then
description = "Update Temp Edit Group"
elseif removed == true then
description = "Delete Temp Edit Group"
elseif created == true then
description = "Create Temp Edit Group"
end
reaper.Undo_EndBlock2(0, description, -1)
reaper.TrackList_AdjustWindows(false)
reaper.PreventUIRefresh(-1)
|
Yesssss <3
|
|
|
Thread Tools |
|
Display Modes |
Linear Mode
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -7. The time now is 06:09 AM.
|