Add and control effects from a script¶
Goal: put an effect on a track (or the master), find its parameters, set one, bypass it, and — when a built-in isn't enough — host a VST3/LV2 plugin effect. All over the gRPC lane, so it scripts and repeats.
Effects live in a mixer insert's
chain, addressed by a (insert, slot) pair:
- Insert is a mixer strip. Insert
0is the master; each track has its own insert (its strip carries the track's name). - Slot is the position in that insert's effect chain —
add_effectreturns the slot it landed in.
Find the insert for a track¶
add_synth_track gives you a track id; effects attach to that track's insert.
List the inserts and match by name (or just target the master, insert 0):
Add an effect and set a parameter¶
Add a built-in reverb, ask what parameters it exposes, then turn the wet level up. Every effect reports its parameters (with ranges) — don't guess, query:
G="grpcurl -plaintext -proto proto/gloopy.proto -import-path proto"
# add reverb to insert 1 -> returns {"insert":1,"slot":0}
$G -d '{"insert":1,"type":3}' 127.0.0.1:50051 gloopy.v1.Gloopy/AddEffect
$G -d '{"insert":1,"slot":0}' 127.0.0.1:50051 gloopy.v1.Gloopy/GetEffectParams
$G -d '{"insert":1,"slot":0,"name":"Wet","value":0.5}' \
127.0.0.1:50051 gloopy.v1.Gloopy/SetEffectParam
The built-in effect type is a name in the clients ("REVERB", :reverb) and
an integer on the wire (3). The full set — gain, filter, delay, reverb, limiter,
bitcrusher, compressor, EQ, waveshaper, and more — is listed under
Effect. (In Lisp, the keyword shorthands cover
:gain :filter :delay :reverb; pass the integer for the rest.)
Setting a parameter to exactly 0
SetEffectParam goes over gRPC, and proto3 drops zero-valued fields on the
wire — so you can't set a parameter to exactly 0.0 this way. Use a tiny
value, or the OSC lane (fx-param), for a true
zero. Same reason as the model's control-lane split.
Bypass or remove¶
Host a plugin effect¶
When a built-in won't do, host a VST3/LV2 effect. Find its identifier in the
plugin list, then add it exactly like a built-in — it lands in a slot and its
parameters come back from effect_params the same way:
See also¶
- The Effect model — the built-in set and the analyzer effects (scope, spectrum, vectorscope).
- Common Lisp client reference · Python client reference.