summaryrefslogtreecommitdiff
path: root/scripts/reset_mixer.lua
blob: 79545af0c584d24da5e653cc518f75de76bbc18e (plain)
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
ardour {
    ["type"]    = "EditorAction",
    name        = "Reset Mixer",
    license     = "MIT",
    author      = "Ben Loftis, Nikolaus Gullotta, Maxime Lecoq",
    description = [[Resets key Mixer settings after user-prompt (warning: this cannot be undone)]]
}

function factory() return function()
    local sp_radio_buttons = {Bypass="bypass", Remove="remove", Nothing=false}
    local dlg = {
        {type="label", align="left", colspan="3", title="Please select below the items you want to reset:" },
        {type="label", align="left", colspan="3", title="(Warning: this cannot be undone!)\n" },

        {type="heading", align ="center", colspan="3", title = "Common Controls:" },
        {type="checkbox", key="fader", default=true, title="Fader"      },
        {type="checkbox", key="mute",  default=true, title="Mute"       },
        {type="checkbox", key="solo",  default=true, title="Solo"       },
        {type="checkbox", key="trim",  default=true, title="Trim"       },
        {type="checkbox", key="pan",   default=true, title="Pan (All)"  },
        {type="checkbox", key="phase", default=true, title="Phase"      },
        {type="checkbox", key="sends", default=true, title="Sends"      },
        {type="checkbox", key="eq",    default=true, title="EQ"         },
        {type="checkbox", key="comp",  default=true, title="Compressor" },

        {type="heading", align="center", colspan="3", title="Processors:" },
        {type="radio", key="plugins", title="Plug-ins",      values=sp_radio_buttons, default="Bypass" },
        {type="radio", key="io",      title="Sends/Inserts", values=sp_radio_buttons, default="Bypass" },

        {type="hseparator", title=""},

        {type="heading", align="center", colspan="3", title="Misc." },
        {type="checkbox", key="auto",    colspan="3", title = "Automation (switch to manual mode)" },
        {type="checkbox", key="groups",  colspan="3", title = "Groups"                             },
    }

    function reset(ctrl, disp, auto)
        local disp = disp or PBD.GroupControlDisposition.NoGroup

        if not(ctrl:isnil()) then
            local pd = ctrl:desc()
            ctrl:set_value(pd.normal, disp)

            if auto then
                ctrl:set_automation_state(auto)
            end
        end
    end

    function reset_eq_controls(route, disp, auto)
        if route:isnil() then
            return
        end

        local disp = disp or PBD.GroupControlDisposition.NoGroup

        reset(route:eq_enable_controllable(), disp, auto)

        local i = 0
        repeat
            for _,ctrl in pairs({
                route:eq_freq_controllable(i),
                route:eq_gain_controllable(i),
                route:eq_q_controllable(i),
            }) do
                reset(ctrl, disp, auto)
            end
            i = i + 1
        until route:eq_freq_controllable(i):isnil()
    end

    function reset_comp_controls(route, disp, auto)
        if route:isnil() then
            return
        end

        local disp = disp or PBD.GroupControlDisposition.NoGroup

        for _,ctrl in pairs({
            route:comp_enable_controllable(),
            route:comp_makeup_controllable(),
            route:comp_mode_controllable(),
            route:comp_speed_controllable(),
            route:comp_threshold_controllable(),
        }) do
            reset(ctrl, disp, auto)
        end
    end

    function reset_send_controls(route, disp, auto)
        if route:isnil() then
            return
        end

        local disp = disp or PBD.GroupControlDisposition.NoGroup

        local i = 0
        repeat
            for _,ctrl in pairs({
                route:send_level_controllable(i),
                route:send_enable_controllable(i),
                route:send_pan_azimuth_controllable(i),
                route:send_pan_azimuth_enable_controllable(i),
            }) do
                reset(ctrl, disp, auto)
            end
            i = i + 1
        until route:send_enable_controllable(i):isnil()
    end

    function reset_plugins(route, prefs)
        if route:isnil() then
            return
        end

        local i = 0
        repeat
            local proc = route:nth_processor(i)
            if not(proc:isnil()) then

                if prefs["plugins"] then
                    local insert = proc:to_insert()
                    if not(insert:isnil()) then
                        if insert:is_channelstrip() or not(insert:display_to_user()) then
                            ARDOUR.LuaAPI.reset_processor_to_default(insert)
                        else
                            if prefs["plugins"] == "remove" then
                                route:remove_processor(proc, nil, true)
                            else
                                insert:deactivate()
                            end
                        end
                    end
                end

                if prefs["io"] then
                    local io_proc = proc:to_ioprocessor()
                    if not(io_proc:isnil()) then
                        if prefs["io"] == "remove" then
                            route:remove_processor(proc, nil, true)
                        else
                            io_proc:deactivate()
                        end
                    end
                end
            end
            i = i + 1
        until proc:isnil()
    end

    local pref = LuaDialog.Dialog("Reset Mixer", dlg):run()

    if not(pref) then goto pass_script end
    assert(pref, "Dialog box was cancelled or is nil")

    for route in Session:get_routes():iter() do
        local disp = PBD.GroupControlDisposition.NoGroup
        local auto = nil

        if pref["auto"] then
            auto = ARDOUR.AutoState.Off
        end

        if pref["eq"]    then reset_eq_controls(route, disp, auto) end
        if pref["comp"]  then reset_comp_controls(route, disp, auto) end
        if pref["sends"] then reset_send_controls(route, disp, auto) end
        reset_plugins(route, pref)

        if pref["fader"] then
            reset(route:gain_control(), disp, auto)
        end

        if pref["phase"] then
            reset(route:phase_control(), disp, auto)
        end

        if pref["trim"] then
            reset(route:trim_control(), disp, auto)
        end

        if pref["mute"] then
            reset(route:mute_control(), disp, auto)
        end

        if pref["solo"] then
            reset(route:solo_control(), disp, auto)
        end

        if pref["pan"] then
            reset(route:pan_azimuth_control(), disp, auto)
            reset(route:pan_elevation_control(), disp, auto)
            reset(route:pan_frontback_control(), disp, auto)
            reset(route:pan_lfe_control(), disp, auto)
            reset(route:pan_width_control(), disp, auto)
        end
    end

    if pref["groups"] then
        for group in Session:route_groups():iter() do
            Session:remove_route_group(group)
        end
    end
    ::pass_script::
    collectgarbage()
end end