Skip to content

Commit

Permalink
Add field for earliest item in changing items' volume linearly; Add s…
Browse files Browse the repository at this point in the history
…cript for changing item's volume linearly with no inputs
  • Loading branch information
MonkeyBars3k committed Oct 20, 2023
1 parent bc45efc commit 2d033dd
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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

Expand Down
Original file line number Diff line number Diff line change
@@ -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)
Original file line number Diff line number Diff line change
@@ -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
Expand Down

0 comments on commit 2d033dd

Please sign in to comment.