From 2d033ddaeb79a177aaa79b2313e1d8ced96af520 Mon Sep 17 00:00:00 2001 From: MonkeyBars3k <91908907+MonkeyBars3k@users.noreply.github.com> Date: Fri, 20 Oct 2023 14:49:19 -0600 Subject: [PATCH] Add field for earliest item in changing items' volume linearly; Add script for changing item's volume linearly with no inputs --- ...t item volume to entered target volume.lua | 39 ++++++++++++------- ...y from earliest to latest item volumes.lua | 32 +++++++++++++++ ...select selected parent folder track(s).lua | 5 ++- 3 files changed, 59 insertions(+), 17 deletions(-) create mode 100644 Utilities/MB_Change selected items' volume linearly from earliest to latest item volumes.lua diff --git a/Utilities/MB_Change selected items' volume linearly from earliest item volume to entered target volume.lua b/Utilities/MB_Change selected items' volume linearly from earliest item volume to entered target volume.lua index b9a7f6c..6c46bb2 100644 --- a/Utilities/MB_Change selected items' volume linearly from earliest item volume to entered target volume.lua +++ b/Utilities/MB_Change selected items' volume linearly from earliest item volume to entered target volume.lua @@ -3,30 +3,39 @@ reaper.Undo_BeginBlock() reaper.PreventUIRefresh(1) -local num_selected_items, retval, target_volume_str, target_volume, first_item, last_item, first_item_vol, last_item_vol, first_item_pos, last_item_pos, slope +local num_selected_items, retval, input_str, target_volume, start_volume, first_item, last_item, first_item_vol, last_item_vol, first_item_pos, last_item_pos, slope num_selected_items = reaper.CountSelectedMediaItems(0) -if num_selected_items < 2 then - return -end +if num_selected_items < 2 then return end -retval, target_volume_str = reaper.GetUserInputs("Set Volume", 1, "Target Volume for Last Item (dB):", "") +retval, input_str = reaper.GetUserInputs("Set Volumes", 2, "Start Volume for First Item (dB):,Target Volume for Last Item (dB):", ",") -if not retval then - return -end +if not retval then return end -target_volume = tonumber(target_volume_str) +start_volume, target_volume = input_str:match("([^,]+),([^,]+)") +first_item = reaper.GetSelectedMediaItem(0, 0) +first_item_vol = reaper.GetMediaItemInfo_Value(first_item, "D_VOL") -if target_volume == nil then - return +if start_volume ~= "" then + start_volume = tonumber(start_volume) + + if start_volume then + first_item_vol = 10 ^ (start_volume / 20) + end end -first_item = reaper.GetSelectedMediaItem(0, 0) last_item = reaper.GetSelectedMediaItem(0, num_selected_items - 1) -first_item_vol = reaper.GetMediaItemInfo_Value(first_item, "D_VOL") -last_item_vol = 10 ^ (target_volume / 20) +last_item_vol = reaper.GetMediaItemInfo_Value(last_item, "D_VOL") + +if target_volume ~= "" then + target_volume = tonumber(target_volume) + + if target_volume then + last_item_vol = 10 ^ (target_volume / 20) + end +end + first_item_pos = reaper.GetMediaItemInfo_Value(first_item, "D_POSITION") last_item_pos = reaper.GetMediaItemInfo_Value(last_item, "D_POSITION") slope = (last_item_vol - first_item_vol) / (last_item_pos - first_item_pos) @@ -37,7 +46,7 @@ for i = 0, num_selected_items - 1 do item = reaper.GetSelectedMediaItem(0, i) item_pos = reaper.GetMediaItemInfo_Value(item, "D_POSITION") new_vol = first_item_vol + slope * (item_pos - first_item_pos) - + reaper.SetMediaItemInfo_Value(item, "D_VOL", new_vol) end diff --git a/Utilities/MB_Change selected items' volume linearly from earliest to latest item volumes.lua b/Utilities/MB_Change selected items' volume linearly from earliest to latest item volumes.lua new file mode 100644 index 0000000..ab3526b --- /dev/null +++ b/Utilities/MB_Change selected items' volume linearly from earliest to latest item volumes.lua @@ -0,0 +1,32 @@ +-- @noindex + +reaper.Undo_BeginBlock() +reaper.PreventUIRefresh(1) + +local num_selected_items, first_item, last_item, first_item_vol, last_item_vol, first_item_pos, last_item_pos, slope + +num_selected_items = reaper.CountSelectedMediaItems(0) + +if num_selected_items < 2 then return end + +first_item = reaper.GetSelectedMediaItem(0, 0) +last_item = reaper.GetSelectedMediaItem(0, num_selected_items - 1) +first_item_vol = reaper.GetMediaItemInfo_Value(first_item, "D_VOL") +last_item_vol = reaper.GetMediaItemInfo_Value(last_item, "D_VOL") +first_item_pos = reaper.GetMediaItemInfo_Value(first_item, "D_POSITION") +last_item_pos = reaper.GetMediaItemInfo_Value(last_item, "D_POSITION") +slope = (last_item_vol - first_item_vol) / (last_item_pos - first_item_pos) + +for i = 0, num_selected_items - 1 do + local item, item_pos, new_vol + + item = reaper.GetSelectedMediaItem(0, i) + item_pos = reaper.GetMediaItemInfo_Value(item, "D_POSITION") + new_vol = first_item_vol + slope * (item_pos - first_item_pos) + + reaper.SetMediaItemInfo_Value(item, "D_VOL", new_vol) +end + +reaper.UpdateTimeline() +reaper.PreventUIRefresh(-1) +reaper.Undo_EndBlock("MB_Change selected items' volume linearly from earliest to latest item volumes", -1) \ No newline at end of file diff --git a/Utilities/MB_Select child (descendent) track(s) & deselect selected parent folder track(s).lua b/Utilities/MB_Select child (descendent) track(s) & deselect selected parent folder track(s).lua index 3456d57..ec8bf27 100644 --- a/Utilities/MB_Select child (descendent) track(s) & deselect selected parent folder track(s).lua +++ b/Utilities/MB_Select child (descendent) track(s) & deselect selected parent folder track(s).lua @@ -1,9 +1,10 @@ -- @description MB_Utilities: Various utility scripts for Reaper -- @author MonkeyBars --- @version 1.5 --- @changelog Add script for changing items' volume linearly +-- @version 1.5.1 +-- @changelog Add field for earliest item in changing items' volume linearly; Add script for changing item's volume linearly with no inputs -- @provides [main] . -- [main] MB_Change selected items' volume linearly from earliest item volume to entered target volume.lua +-- [main] MB_Change selected items' volume linearly from earliest to latest item volumes.lua -- [main] MB_Create new autoincremented folder and save project.lua -- [main] MB_Create new pair of grouped tracks with MIDI & stereo audio routing to & from selected (virtual instrument) tracks.lua -- [main] MB_Deselect tracks if child track(s) & select their direct parent folder track(s).lua