Example: s.boot; SynthDefLib(\sine2, { |out = 0, freq = 440, amp = 0.5| var sig; sig = SinOsc.ar(freq, 0, amp) * EnvGen.kr(~env, doneAction:2); Out.ar(out, [sig, sig]) }); SynthDefLib.play(\sine2, nil, [\env, Env.sine(1)]); SynthDefLib.play(\sine2, nil, [\env, Env.sine(5)], latency:1); SynthDefLib.play(\sine2, [\freq, 200, \amp, 0.3], [\env, Env.sine(1)]);
This is unnecessary. You can just write closures. This is what I am doing for the basic synth lib.
You can put these functions in a dictionary and archive them. ( var mySynthDefMakerLib; mySynthDefMakerLib = ( sine2: #{|name, env| SynthDef(name, { var sig; sig = SinOsc.ar(freq, 0, amp) * EnvGen.kr(env, doneAction:2); Out.ar(out, [sig, sig]) }); }, pulse2: #{|name, env| SynthDef(name, { var sig; sig = Pulse.ar(freq, 0.2, 0, amp) * EnvGen.kr(env, doneAction:2); Out.ar(out, [sig, sig]) }); } ); mySynthDefMakerLib.writeArchive("mySynthDefMakerLib"); )