|
|
|
08-26-2020, 06:54 AM
|
#1
|
Human being with feelings
Join Date: Mar 2019
Posts: 428
|
Razor Edit Scripts
While the other threads are busy discussing features and implementation details I thought it would be nice to have a thread for experimenting with scripts now that we have access to API.
Here are some wrapper functions around the "basic API" that are hopefully a bit more approachable. (Lua)
This stuff will likely break in the future, but it is nice to have something that makes it easier to play around with razor edits in the meanwhile. Place this at the top of your code:
Code:
function literalize(str)
return str:gsub("[%(%)%.%%%+%-%*%?%[%]%^%$]", function(c) return "%" .. c end)
end
function GetGUIDFromEnvelope(envelope)
local ret2, envelopeChunk = reaper.GetEnvelopeStateChunk(envelope, "")
local GUID = "{" .. string.match(envelopeChunk, "GUID {(%S+)}") .. "}"
return GUID
end
function GetItemsInRange(track, areaStart, areaEnd)
local items = {}
local itemCount = reaper.CountTrackMediaItems(track)
for k = 0, itemCount - 1 do
local item = reaper.GetTrackMediaItem(track, k)
local pos = reaper.GetMediaItemInfo_Value(item, "D_POSITION")
local length = reaper.GetMediaItemInfo_Value(item, "D_LENGTH")
local itemEndPos = pos+length
--check if item is in area bounds
if (itemEndPos > areaStart and itemEndPos <= areaEnd) or
(pos >= areaStart and pos < areaEnd) or
(pos <= areaStart and itemEndPos >= areaEnd) then
table.insert(items,item)
end
end
return items
end
function GetEnvelopePointsInRange(envelopeTrack, areaStart, areaEnd)
local envelopePoints = {}
for i = 1, reaper.CountEnvelopePoints(envelopeTrack) do
local retval, time, value, shape, tension, selected = reaper.GetEnvelopePoint(envelopeTrack, i - 1)
if time >= areaStart and time <= areaEnd then --point is in range
envelopePoints[#envelopePoints + 1] = {
id = i-1 ,
time = time,
value = value,
shape = shape,
tension = tension,
selected = selected
}
end
end
return envelopePoints
end
function SetTrackRazorEdit(track, areaStart, areaEnd, clearSelection)
if clearSelection == nil then clearSelection = false end
if clearSelection then
local ret, area = reaper.GetSetMediaTrackInfo_String(track, 'P_RAZOREDITS', '', false)
--parse string, all this string stuff could probably be written better
local str = {}
for j in string.gmatch(area, "%S+") do
table.insert(str, j)
end
--strip existing selections across the track
local j = 1
while j <= #str do
local GUID = str[j+2]
if GUID == '""' then
str[j] = ''
str[j+1] = ''
str[j+2] = ''
end
j = j + 3
end
--insert razor edit
local REstr = tostring(areaStart) .. ' ' .. tostring(areaEnd) .. ' ""'
table.insert(str, REstr)
local finalStr = ''
for i = 1, #str do
local space = i == 1 and '' or ' '
finalStr = finalStr .. space .. str[i]
end
local ret, area = reaper.GetSetMediaTrackInfo_String(track, 'P_RAZOREDITS', finalStr, true)
return ret
else
local ret, area = reaper.GetSetMediaTrackInfo_String(track, 'P_RAZOREDITS', '', false)
local str = area ~= nil and area .. ' ' or ''
str = str .. tostring(areaStart) .. ' ' .. tostring(areaEnd) .. ' ""'
local ret, area = reaper.GetSetMediaTrackInfo_String(track, 'P_RAZOREDITS', str, true)
return ret
end
end
function SetEnvelopeRazorEdit(envelope, areaStart, areaEnd, clearSelection, GUID)
local GUID = GUID == nil and GetGUIDFromEnvelope(envelope) or GUID
local track = reaper.Envelope_GetParentTrack(envelope)
if clearSelection then
local ret, area = reaper.GetSetMediaTrackInfo_String(track, 'P_RAZOREDITS', '', false)
--parse string
local str = {}
for j in string.gmatch(area, "%S+") do
table.insert(str, j)
end
--strip existing selections across the envelope
local j = 1
while j <= #str do
local envGUID = str[j+2]
if GUID ~= '""' and envGUID:sub(2,-2) == GUID then
str[j] = ''
str[j+1] = ''
str[j+2] = ''
end
j = j + 3
end
--insert razor edit
local REstr = tostring(areaStart) .. ' ' .. tostring(areaEnd) .. ' ' .. GUID
table.insert(str, REstr)
local finalStr = ''
for i = 1, #str do
local space = i == 1 and '' or ' '
finalStr = finalStr .. space .. str[i]
end
local ret, area = reaper.GetSetMediaTrackInfo_String(track, 'P_RAZOREDITS', finalStr, true)
return ret
else
local ret, area = reaper.GetSetMediaTrackInfo_String(track, 'P_RAZOREDITS', '', false)
local str = area ~= nil and area .. ' ' or ''
str = str .. tostring(areaStart) .. ' ' .. tostring(areaEnd) .. ' ' .. GUID
local ret, area = reaper.GetSetMediaTrackInfo_String(track, 'P_RAZOREDITS', str, true)
return ret
end
end
function GetRazorEdits()
local trackCount = reaper.CountTracks(0)
local areaMap = {}
for i = 0, trackCount - 1 do
local track = reaper.GetTrack(0, i)
local ret, area = reaper.GetSetMediaTrackInfo_String(track, 'P_RAZOREDITS', '', false)
if area ~= '' then
--PARSE STRING
local str = {}
for j in string.gmatch(area, "%S+") do
table.insert(str, j)
end
--FILL AREA DATA
local j = 1
while j <= #str do
--area data
local areaStart = tonumber(str[j])
local areaEnd = tonumber(str[j+1])
local GUID = str[j+2]
local isEnvelope = GUID ~= '""'
--get item/envelope data
local items = {}
local envelopeName, envelope
local envelopePoints
if not isEnvelope then
items = GetItemsInRange(track, areaStart, areaEnd)
else
envelope = reaper.GetTrackEnvelopeByChunkName(track, GUID:sub(2, -2))
local ret, envName = reaper.GetEnvelopeName(envelope)
envelopeName = envName
envelopePoints = GetEnvelopePointsInRange(envelope, areaStart, areaEnd)
end
local areaData = {
areaStart = areaStart,
areaEnd = areaEnd,
track = track,
items = items,
--envelope data
isEnvelope = isEnvelope,
envelope = envelope,
envelopeName = envelopeName,
envelopePoints = envelopePoints,
GUID = GUID:sub(2, -2)
}
table.insert(areaMap, areaData)
j = j + 3
end
end
end
return areaMap
end
function SplitRazorEdits(razorEdits)
local areaItems = {}
local tracks = {}
reaper.PreventUIRefresh(1)
for i = 1, #razorEdits do
local areaData = razorEdits[i]
if not areaData.isEnvelope then
local items = areaData.items
--recalculate item data for tracks with previous splits
if tracks[areaData.track] ~= nil then
items = GetItemsInRange(areaData.track, areaData.areaStart, areaData.areaEnd)
end
for j = 1, #items do
local item = items[j]
--split items
local newItem = reaper.SplitMediaItem(item, areaData.areaStart)
if newItem == nil then
reaper.SplitMediaItem(item, areaData.areaEnd)
table.insert(areaItems, item)
else
reaper.SplitMediaItem(newItem, areaData.areaEnd)
table.insert(areaItems, newItem)
end
end
tracks[areaData.track] = 1
end
end
reaper.PreventUIRefresh(-1)
return areaItems
end
Moved the explanations/examples over to this post as they no longer fit here: https://forum.cockos.com/showpost.ph...9&postcount=73
Last edited by BirdBird; 09-01-2020 at 04:03 PM.
|
|
|
08-26-2020, 02:47 PM
|
#2
|
Human being with feelings
Join Date: Apr 2013
Location: France
Posts: 9,900
|
meo-mespotine will like this code snippets for sure :P
Thanks for sharing !
|
|
|
08-27-2020, 12:55 AM
|
#3
|
Human being with feelings
Join Date: Feb 2020
Location: Los Angeles
Posts: 463
|
I just wrote a very simple one that returns true or false if a Razor Edit exists anywhere in your session....... I don't know how you get those cool code snippet windows. Fortunately my script is short....
Code:
function RazorEditSelectionExists()
for i=0, reaper.CountTracks(0)-1 do
local retval, x = reaper.GetSetMediaTrackInfo_String(reaper.GetTrack(0,i), "P_RAZOREDITS", "string", false)
if x ~= "" then return true end
end--for
return false
end--RazorEditSelectionExists()
Last edited by sonictim; 10-30-2020 at 09:12 AM.
Reason: code brackets
|
|
|
08-27-2020, 02:03 AM
|
#4
|
Human being with feelings
Join Date: Feb 2020
Location: Los Angeles
Posts: 463
|
Link Razor Edit with Item Selection
BirdBird! Thank you...
Using your code, and the code I just posted, I just wrote a quick defer function that will link area selection with item selection. Now I'm using my Razor Edit also as a Marquee Selection! I'm a novice coder (was my first time using defer) so if anyone notices any problems with it, please let me know
Code:
function Main()
if RazorEditSelectionExists() then
local selections = GetRazorEdits()
for i = 1, #selections do
local areaData = selections[i]
local items = areaData.items
for j = 1, #items do reaper.SetMediaItemSelected(items[j], true) end
end
end--if
reaper.defer(Main)
end--Main()
Main()
Last edited by sonictim; 08-27-2020 at 02:36 PM.
Reason: updating code
|
|
|
08-27-2020, 06:47 AM
|
#5
|
Human being with feelings
Join Date: May 2017
Location: Leipzig
Posts: 6,630
|
Quote:
Originally Posted by X-Raym
meo-mespotine will like this code snippets for sure :P
Thanks for sharing !
|
How did you know that?
@sonictim
please put [CODE] brackets arounds your code. Just select the code and hit the #-button in the editor. Otherwise, the forum's layouting could break things.
And it's better readable that way.
|
|
|
08-27-2020, 06:47 AM
|
#6
|
Human being with feelings
Join Date: Apr 2013
Location: France
Posts: 9,900
|
@sonictim
to emebed mua code on fprum post use [ code][ /code] syntax without spaces. :P
|
|
|
08-27-2020, 09:03 AM
|
#7
|
Human being with feelings
Join Date: Dec 2009
Location: Oblivion
Posts: 10,271
|
I can't find other threads discussing the feature...what is razor edit?
|
|
|
08-27-2020, 09:11 AM
|
#8
|
Human being with feelings
Join Date: Jul 2007
Location: New Joisey
Posts: 6,027
|
Quote:
Originally Posted by foxAsteria
I can't find other threads discussing the feature...what is razor edit?
|
It's what "Area Selection" was renamed to. You can see the Area Selection discussion thread for more info.
|
|
|
08-27-2020, 09:11 AM
|
#9
|
Human being with feelings
Join Date: May 2017
Location: Leipzig
Posts: 6,630
|
If I understood it right, it's the new name of the pre-release-feature formerly known as area-selection.
|
|
|
08-27-2020, 10:16 AM
|
#10
|
Human being with feelings
Join Date: Apr 2013
Location: France
Posts: 9,900
|
|
|
|
08-27-2020, 10:36 AM
|
#11
|
Human being with feelings
Join Date: Oct 2019
Posts: 1,082
|
It's Area Selection renamed and somewhat repurposed.
OOPS late reply, sorry I left the window open and sent the post later.
Last edited by juan_r; 08-27-2020 at 10:36 AM.
Reason: LATE! :)
|
|
|
08-27-2020, 02:37 PM
|
#12
|
Human being with feelings
Join Date: Feb 2020
Location: Los Angeles
Posts: 463
|
Code brackets
Thanks for telling me how to do that! It works!
|
|
|
08-29-2020, 12:02 PM
|
#13
|
Human being with feelings
Join Date: Mar 2019
Posts: 428
|
Something in progress.
Last edited by BirdBird; 12-27-2020 at 11:09 AM.
|
|
|
08-29-2020, 03:30 PM
|
#14
|
Human being with feelings
Join Date: Oct 2017
Location: Black Forest
Posts: 5,067
|
Fantastic Birdy!
|
|
|
08-29-2020, 04:01 PM
|
#15
|
Human being with feelings
Join Date: Aug 2015
Posts: 3,672
|
that's so cool. this will be an amazingly fast way to slice up and improvise with tempo-mapped phrases. i can't help but imagine ultimately doing this kind of slicing/copying/loop mangling with a control surface, and then diving in with the mouse for the deeper edits.
|
|
|
08-29-2020, 04:30 PM
|
#16
|
Human being with feelings
Join Date: Jun 2009
Location: South, UK
Posts: 14,218
|
Quote:
Originally Posted by BirdBird
Something in progress.
|
Amazing!
I'd love to try this if possible when you're ready to share it!
Do you think it's possible to make a version that when the script is activated uses the currently selected item's start and end points as the start and end of the razor edit?
The reason being is that I often use an empty midi item (or just an empty item) to represent the "contents" of the folder in that area and I was looking for a way to double click this item to activate a script that then selects all the child track items within the same time area as this empty midi item that's on the parent folder track.
Emulating the way folder tracks work in Cubase/Nuendo kind of
If it's possible it could do that or have a version that can automatically "fit" to the selected parent track item, that would be amazing and a dream come true for working with folders in reaper!
__________________
subproject FRs click here
note: don't search for my pseudonym on the web. The "musicbynumbers" you find is not me or the name I use for my own music.
|
|
|
08-29-2020, 04:41 PM
|
#17
|
Human being with feelings
Join Date: Jun 2009
Location: South, UK
Posts: 14,218
|
Hmm. Or maybe you could post that gif in the latest pre release thread and we could ask Justin/Scwha to put this in directly as a mouse modifier as it basically fills in for folders which is one of the last things missing from Reaper that is in most other DAWs now
Basically it's this that I do and then have to move things manually which isn't great. Would love this to be native and razor edits might allow the devs to finally add folders in fully!
__________________
subproject FRs click here
note: don't search for my pseudonym on the web. The "musicbynumbers" you find is not me or the name I use for my own music.
|
|
|
08-29-2020, 05:25 PM
|
#18
|
Human being with feelings
Join Date: Jan 2014
Posts: 923
|
|
|
|
08-30-2020, 02:17 AM
|
#19
|
Human being with feelings
Join Date: Dec 2010
Posts: 3,826
|
Quote:
Originally Posted by musicbynumbers
Amazing!
I'd love to try this if possible when you're ready to share it!
Do you think it's possible to make a version that when the script is activated uses the currently selected item's start and end points as the start and end of the razor edit?
The reason being is that I often use an empty midi item (or just an empty item) to represent the "contents" of the folder in that area and I was looking for a way to double click this item to activate a script that then selects all the child track items within the same time area as this empty midi item that's on the parent folder track.
Emulating the way folder tracks work in Cubase/Nuendo kind of
If it's possible it could do that or have a version that can automatically "fit" to the selected parent track item, that would be amazing and a dream come true for working with folders in reaper!
|
A script that takes a visual render of the folder contents peaks and then loads it into an empty item would work fine too.
__________________
Stop posting huge images, smaller images or thumbnail, it's not rocket science!
|
|
|
08-30-2020, 02:38 AM
|
#20
|
Human being with feelings
Join Date: Oct 2017
Location: Black Forest
Posts: 5,067
|
Quote:
Originally Posted by Embass
|
Holy Batman!!!!!
|
|
|
08-30-2020, 03:08 AM
|
#21
|
Human being with feelings
Join Date: Jun 2009
Location: South, UK
Posts: 14,218
|
Quote:
Originally Posted by Win Conway
A script that takes a visual render of the folder contents peaks and then loads it into an empty item would work fine too.
|
That would be a nice extra yes.
As long as we get to define the start and end of the parent folder's start and end still as I wouldn't want any gaps in the child items breaking the parent folder item into multiple smaller ones.
Say if the folder contained a few drum hits, I wouldn't want the gaps in between to break up the parent folder into smaller bits.
It must act as a container/manager for all the "little bits"
__________________
subproject FRs click here
note: don't search for my pseudonym on the web. The "musicbynumbers" you find is not me or the name I use for my own music.
|
|
|
08-30-2020, 03:08 AM
|
#22
|
Human being with feelings
Join Date: Jun 2009
Location: South, UK
Posts: 14,218
|
Quote:
Originally Posted by Embass
|
That looks awesome!
Hope you will consider putting it in Reapack when razor edit is released.
__________________
subproject FRs click here
note: don't search for my pseudonym on the web. The "musicbynumbers" you find is not me or the name I use for my own music.
Last edited by musicbynumbers; 08-30-2020 at 03:56 AM.
|
|
|
08-30-2020, 03:22 AM
|
#23
|
Human being with feelings
Join Date: Jun 2009
Location: Croatia
Posts: 4,689
|
Some testing fun with envelopes:
Last edited by Sexan; 08-30-2020 at 03:55 AM.
|
|
|
08-30-2020, 03:52 AM
|
#24
|
Human being with feelings
Join Date: Jun 2009
Location: South, UK
Posts: 14,218
|
Nice work Sexan! Looks very useful
__________________
subproject FRs click here
note: don't search for my pseudonym on the web. The "musicbynumbers" you find is not me or the name I use for my own music.
|
|
|
08-30-2020, 04:07 AM
|
#25
|
Human being with feelings
Join Date: Jan 2014
Posts: 923
|
Quote:
Originally Posted by musicbynumbers
The reason being is that I often use an empty midi item (or just an empty item) to represent the "contents" of the folder in that area and I was looking for a way to double click this item to activate a script that then selects all the child track items within the same time area as this empty midi item that's on the parent folder track.
|
Select 1 media item and run this script.
Code:
-- Author: Embass
-- v0.1
-- enable this option if you want to select automation too..
-- Options: Move envelope points with media items and razor edits
local media_items_count = reaper.CountSelectedMediaItems(0)
if media_items_count ~= 1 then
local mouse_x, mouse_y = reaper.GetMousePosition()
reaper.TrackCtl_SetToolTip("Select 1 media item", mouse_x + 15, mouse_y, true)
return -- terminate script
end
local media_item = reaper.GetSelectedMediaItem(0, 0)
if media_item == nil then return end -- terminate script
local track = reaper.GetMediaItem_Track(media_item)
if track == nil then return end -- terminate script
local media_item_start = reaper.GetMediaItemInfo_Value(media_item, "D_POSITION")
local media_item_len = reaper.GetMediaItemInfo_Value(media_item, "D_LENGTH")
local media_item_end = media_item_start + media_item_len
if media_item_len == 0 then return end -- terminate script
function get_folder_tracks(folder_track) --> folder_tracks
local all_tracks = {}
table.insert(all_tracks, folder_track)
if reaper.GetMediaTrackInfo_Value(folder_track, "I_FOLDERDEPTH") ~= 1 then
return all_tracks -- exit, track not a folder
end
local tracks_count = reaper.CountTracks(0)
local folder_track_depth = reaper.GetTrackDepth(folder_track)
local track_index = reaper.GetMediaTrackInfo_Value(folder_track, "IP_TRACKNUMBER")
for i = track_index, tracks_count - 1 do
local track = reaper.GetTrack(0, i)
local track_depth = reaper.GetTrackDepth(track)
if track_depth > folder_track_depth then
table.insert(all_tracks, track)
else
break -- exit loop
end
end
return all_tracks
end
local folder_tracks = get_folder_tracks(track)
reaper.PreventUIRefresh(1)
reaper.Undo_BeginBlock()
reaper.Main_OnCommand(42406, 0) -- Razor edit: Clear all areas
local str_area = string.format([[%s %s '']], media_item_start, media_item_end)
for i, track in ipairs(folder_tracks) do
reaper.GetSetMediaTrackInfo_String(track, "P_RAZOREDITS", str_area, true)
end
reaper.Undo_EndBlock("Set area selection", -1)
reaper.PreventUIRefresh(-1)
reaper.UpdateArrange()
|
|
|
08-30-2020, 04:11 AM
|
#26
|
Human being with feelings
Join Date: Dec 2010
Posts: 3,826
|
Quote:
Originally Posted by musicbynumbers
That would be a nice extra yes.
As long as we get to define the start and end of the parent folder's start and end still as I wouldn't want any gaps in the child items breaking the parent folder item into multiple smaller ones.
Say if the folder contained a few drum hits, I wouldn't want the gaps in between to break up the parent folder into smaller bits.
It must act as a container/manager for all the "little bits"
|
Yeah, it would be one of my most used scripts for sure.
__________________
Stop posting huge images, smaller images or thumbnail, it's not rocket science!
|
|
|
08-30-2020, 04:19 AM
|
#27
|
Human being with feelings
Join Date: Dec 2010
Posts: 3,826
|
Quote:
Originally Posted by Sexan
Some testing fun with envelopes:
ImgSnip
|
Oh crap, do a version of this that automagically does grid based REs across an automation item, then just shows a simple panel with on/off switches for each RE (off = 0, on = left as is) you just created the ultimate trance/step gate maker!!
__________________
Stop posting huge images, smaller images or thumbnail, it's not rocket science!
|
|
|
08-30-2020, 05:05 AM
|
#28
|
Human being with feelings
Join Date: Jun 2009
Location: Croatia
Posts: 4,689
|
|
|
|
08-30-2020, 05:23 AM
|
#29
|
Human being with feelings
Join Date: Dec 2019
Posts: 214
|
|
|
|
08-30-2020, 06:28 AM
|
#30
|
Human being with feelings
Join Date: Jun 2009
Location: South, UK
Posts: 14,218
|
Quote:
Originally Posted by Embass
Select 1 media item and run this script.
|
Thank you so much! That's made my year!
I added it to mouse modifiers so double clicking on an item's bottom half activates the script and it works amazingly well!
Happy to donate if you have a donation page!
__________________
subproject FRs click here
note: don't search for my pseudonym on the web. The "musicbynumbers" you find is not me or the name I use for my own music.
|
|
|
08-30-2020, 06:48 AM
|
#31
|
Human being with feelings
Join Date: Oct 2017
Location: Larisa, Greece
Posts: 3,827
|
You guys are nuts! Freaking amazing start!
|
|
|
08-30-2020, 07:24 AM
|
#32
|
Human being with feelings
Join Date: Oct 2017
Location: Larisa, Greece
Posts: 3,827
|
@Embass,could you make the swipe comping script so that it mute each part below after comping it? This would be useful when playback to listen only the top lane.
|
|
|
08-30-2020, 07:34 AM
|
#33
|
Human being with feelings
Join Date: Jun 2009
Location: South, UK
Posts: 14,218
|
Quote:
Originally Posted by Vagelis
@Embass,could you make the swipe comping script so that it mute each part below after comping it? This would be useful when playback to listen only the top lane.
|
Wouldn't this then have to cut the item to then mute it which would make further edits a bit messier.
I too though was thinking of the best way to use it and if you put the takes in as child tracks and turn the child track volumes down (or mute) then you would only hear the parent destination track anyway.
Then when finished just collapse the folder and done
Also, you could use the SWS action to solo audition the item under the mouse to hear the takes on their own before selecting them although not that useful out of context maybe
The other thing was to then create crossfades afterwards on the destination items but I think we have scripts for that too.
__________________
subproject FRs click here
note: don't search for my pseudonym on the web. The "musicbynumbers" you find is not me or the name I use for my own music.
|
|
|
08-30-2020, 08:43 AM
|
#34
|
Human being with feelings
Join Date: Jun 2009
Location: Croatia
Posts: 4,689
|
Adding compress/expand as we speak
|
|
|
08-30-2020, 08:49 AM
|
#35
|
Human being with feelings
Join Date: Jul 2007
Location: New Joisey
Posts: 6,027
|
Great stuff in here! Particularly impressed with the swipe comping (just wish it worked in lanes) and Sexan's envelope transform scripts.
|
|
|
08-30-2020, 09:31 AM
|
#36
|
Human being with feelings
Join Date: Mar 2019
Posts: 428
|
Quote:
Originally Posted by musicbynumbers
Amazing!
I'd love to try this if possible when you're ready to share it!
|
Ill attach it down below, it is just a proof of concept so there might be bugs
Quote:
Do you think it's possible to make a version that when the script is activated uses the currently selected item's start and end points as the start and end of the razor edit?
The reason being is that I often use an empty midi item (or just an empty item) to represent the "contents" of the folder in that area and I was looking for a way to double click this item to activate a script that then selects all the child track items within the same time area as this empty midi item that's on the parent folder track.
Emulating the way folder tracks work in Cubase/Nuendo kind of
If it's possible it could do that or have a version that can automatically "fit" to the selected parent track item, that would be amazing and a dream come true for working with folders in reaper!
|
It should be possible to make but I am not sure if it is possible to get it to a usable state with items without too many "hacks", at which point id probably not use it myself.
Last edited by BirdBird; 08-30-2020 at 10:06 AM.
|
|
|
08-30-2020, 09:52 AM
|
#37
|
Human being with feelings
Join Date: Aug 2015
Posts: 3,672
|
sexan, would those envelope scripts work with AI in medialane?
|
|
|
08-30-2020, 09:55 AM
|
#38
|
Human being with feelings
Join Date: Jun 2009
Location: South, UK
Posts: 14,218
|
Thanks BirdBird!
Embass script is basically fulfilling my needs regarding using an item to represent the folder overview but your script definitely has uses too for various other things so I'll give it a try too when time.
__________________
subproject FRs click here
note: don't search for my pseudonym on the web. The "musicbynumbers" you find is not me or the name I use for my own music.
|
|
|
08-30-2020, 10:31 AM
|
#39
|
Human being with feelings
Join Date: Jun 2009
Location: Croatia
Posts: 4,689
|
Quote:
Originally Posted by mccrabney
sexan, would those envelope scripts work with AI in medialane?
|
Its not working on AIs, API does not provide AI.
Anyway if anyone wants to play around (its early version, maybe buggy)
Needs JS API, add shortcut to it. It works on press and hold so:
press and hold shortcut and do stuff, release to stop
Mouse in RE = trim envelope
Mouse outside RE (left or right) wraps envelope
Last edited by Sexan; 02-13-2023 at 08:15 AM.
|
|
|
08-30-2020, 10:51 AM
|
#40
|
Human being with feelings
Join Date: Oct 2007
Location: home is where the heart is
Posts: 12,110
|
Quote:
Originally Posted by Sexan
API does not provide AI.
|
For sure Reaper has an API to work with AI (e.g. CountAutomationItems, GetSetAutomationItemInfo, SetEnvelopePointEx etc.) or did I misunderstand?
|
|
|
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 02:00 AM.
|