SynthDef names and stores a reusable synth recipe in the server; Synth instantiates it with specific argument values
SynthDef separates synth definition from playback: SynthDef("name", {UGen graph}).add compiles and registers the recipe with the server under a string name. Later, Synth("name") or Synth("name", [\arg, value]) creates a live instance with optional argument overrides. This two-step approach enables reuse (create the same SynthDef many times with different args) and Pbind integration (\instrument, "name"). Every inline {SinOsc.ar}.play secretly does this two-step under the hood with a temporary name.
Examples
SynthDef("mySine", {arg freq=440, amp=0.1;
Out.ar(0, SinOsc.ar(freq,0,Env.perc.kr(2)));
}).add;
Synth("mySine");
Synth("mySine", [\freq, 660, \amp, 0.2]);
Assessment
Write a SynthDef called “pluck” with freq and amp arguments using Env.linen. Write three Synth calls with different pitches. Then write a Pbind that sequences events through this SynthDef.