/
TJF Folders Always Show Trim Automation Line.lua
135 lines (85 loc) · 3.55 KB
/
TJF Folders Always Show Trim Automation Line.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
----------------------------------DEBUG FUNCTIONS
--reaper.ClearConsole()
function Msg(param) reaper.ShowConsoleMsg(tostring(param).."\n") end
function take(param) return reaper.GetActiveTake(items[param]) end --can call take function to match take to item
----------------------------------SET GLOBAL VARIABLES
local lastProjectChangeCount = 0
----------------------------------SET COMMON FUNCTIONS
function CreateNewEnv(chunkname)
local EnvChunk = chunkname .. [[
EGUID ]]..reaper.genGuid("")..[[
ACT 1 -1
VIS 1 0 1
LANEHEIGHT 0 0
ARM 1
DEFSHAPE 0 -1 -1
VOLTYPE 1
PT 0 1 0
>
]]
return EnvChunk
end -- CreateNewTrimEnv()
function ProcessTrack(track, bool)
local _, str = reaper.GetTrackStateChunk(track, "", false )
local TrimEnv = string.match(str, "<VOLENV3.->") --find the volume envelope
if TrimEnv
then
vis = "\nVIS 0 0 1"
if bool then vis = "\nVIS 1 0 1"
TrimEnv = string.gsub(TrimEnv, "PT.->", "PT 0 1 0\n>")
end
TrimEnv = string.gsub(TrimEnv, "\nVIS %d %d %d", vis)
str = string.gsub(str, "<VOLENV3.->", TrimEnv)
else
if bool then
TrimEnv = string.match(str, "MAINSEND %d %d\n")..CreateNewEnv("<VOLENV3")
str = string.gsub(str, "MAINSEND %d %d\n", TrimEnv)
end
end
reaper.SetTrackStateChunk(track, str, false)
end -- ProcessFolder()
function isFolder(track)
if reaper.GetMediaTrackInfo_Value(track, "I_FOLDERDEPTH" ) == 1 then return true
else return false
end
end -- isFolder()
----------------------------------FUNCTION SETS COMMAND STATE FOR THIS FUNCTION
(function()
local _, _, sectionId, cmdId = reaper.get_action_context()
if sectionId ~= -1 then
reaper.SetToggleCommandState(sectionId, cmdId, 1)
reaper.RefreshToolbar2(sectionId, cmdId)
reaper.atexit(function()
reaper.SetToggleCommandState(sectionId, cmdId, 0)
reaper.RefreshToolbar2(sectionId, cmdId)
end)
end
end)()
----------------------------------MAIN FUNCTION
function Main()
projectChangeCount = reaper.GetProjectStateChangeCount(0)
if projectChangeCount > lastProjectChangeCount or counter > 500 then
action = reaper.Undo_CanUndo2(0)
if string.find(string.lower(action), "toggle track folder") or counter > 500
then
reaper.PreventUIRefresh(1)
for i = 0, reaper.CountTracks(0) - 1 do
local track = reaper.GetTrack(0,i)
local _, name = reaper.GetTrackName(track)
if name == "PIX" then
ProcessTrack(track, false)
else
ProcessTrack(track, isFolder(track))
end
end
reaper.PreventUIRefresh(-1)
reaper.UpdateArrange()
counter = 0
end
end
lastProjectChangeCount = projectChangeCount
counter = counter + 1
reaper.defer(Main)
end--Main()
counter = 0
Main()