# SynthDefs

## Sending a SynthDef to a Server

SynthDefs are templates for Synths, which are sent to a server:

// define a SynthDef and send it to the server
(

SynthDef(\sine_example,
{
// define arguments of the SynthDef
|f = 100, a = 1|

// calculate a sine wave with frequency and amplitude
var x = a * SinOsc.ar(f);

// send the signal to the output bus '0'
Out.ar(0, x);

}).send(s);

)


## Create a Synth from a SynthDef

Once a SynthDef has been sent to the server, instances can be created:

// create a synth from the SynthDef
~my_synth = Synth(\sine_example, [\f, 1000, \a, 1]);

// create another synth from the SynthDef
~another_synth = Synth(\sine_example, [\f, 1100, \a, 1]);


## Changing Synth Parameters

All parameters defined in the SynthDef of running synths can be changed, using the associated variable on the client side:

// set a parameter
~my_synth.set(\f,900);


## Removing Synths

Running synths with a client-side variable can be removed from the server:

// free the nodes
~my_synth.free();
~another_synth.free();