{
   "ancestor_list" : [],
   "description" : "3 bandpass-filtered sawtooth waves, center frequency of bandpass filter modulated by OSC via the multitouch feature of Sensors2Osc",
   "author" : "emergent",
   "name" : "OSC etude #1",
   "code" : "// OSC etude 1\r\n\r\n(\r\ns = Server.local;\r\ns.options.sampleRate_(44100);\r\ns.options.memSize_(65536 * 4);\r\ns.boot;\r\n\r\n// global variables and buses\r\n\r\n~out = 0;\r\n\r\n// make buses\r\n~makeBuses = {~revBus = Bus.audio(s, 2)};\r\n\r\n// make nodes\r\n~makeNodes = {\r\n\ts.bind({\r\n\t\t~mGr = Group.new; // marimba group\r\n\t\t~effects = Group.after(~mGr);\r\n\t\t~reverb = Synth(\\reverb, [\\in, ~revBus, \\out, ~out], ~effects, addAction:\\addToTail);\r\n\t});\r\n};\r\n\r\n~cleanup = {\r\n\ts.freeAll;\r\n\tBuffer.freeAll;\r\n\tOSCdef.freeAll;\r\n\ts.newBusAllocators;\r\n\tServerBoot.removeAll;\r\n\tServerTree.removeAll;\r\n\tServerQuit.removeAll;\r\n};\r\n\r\n// register functions\r\nServerBoot.add(~makeBuses);\r\nServerQuit.add(~cleanup);\r\n\r\n// OSCdefs\r\nOSCdef.new(\\multi1,\r\n\t{\r\n \t\targ msg;\r\n\t\t//[msg].postln;\r\n\t\t~marimba[0].set(\\rq, msg[1].linlin(0.0,1.0,0.03,0.007));\r\n\t\t~marimba[0].set(\\cf, msg[2].linlin(0.0,1.0,110,880));\r\n\t},\r\n\t'/touch1'\r\n);\r\n\r\nOSCdef.new(\\multi2,\r\n\t{\r\n \t\targ msg;\r\n\t\t//[msg].postln;\r\n\t\t~marimba[1].set(\\rq, msg[1].linlin(0.0,1.0,0.03,0.007));\r\n\t\t~marimba[1].set(\\cf, msg[2].linlin(0.0,1.0,110,880));\r\n\t},\r\n\t'/touch2'\r\n);\r\n\r\nOSCdef.new(\\multi3,\r\n\t{\r\n \t\targ msg;\r\n\t\t//[msg].postln;\r\n\t\t~marimba[2].set(\\rq, msg[1].linlin(0.0,1.0,0.03,0.007));\r\n\t\t~marimba[2].set(\\cf, msg[2].linlin(0.0,1.0,110,880));\r\n\t},\r\n\t'/touch3'\r\n);\r\n\r\ns.waitForBoot({\r\n\ts.sync;\r\n\t// SynthDefs\r\n\tSynthDef(\\marimba, {\r\n\t\tvar sig, env, rq;\r\n\t\trq = \\rq.kr(0.03);\r\n\t\tenv = Env.asr(\\atk.ir(0.25), 0.5, \\rel.ir(1)).kr(2, \\gate.kr(1));\r\n\t\tsig = LFSaw.ar(\r\n\t\t\tLFNoise1.kr(\r\n\t\t\t\tLFNoise1.kr(6).range(\\rmin.kr(2), \\rmax.kr(16)),\r\n\t\t\t\t0.9,\r\n\t\t\t).exprange(\\fmin.kr(4),\\fmax.kr(12))\r\n\t\t)!2;\r\n\t\tsig = BPF.ar(sig, \\cf.kr(200), rq, 1/rq.sqrt);\r\n\t\tsig = sig * env * \\amp.kr(0.45);\r\n\t\tOut.ar(\\out.ir(~out), sig * \\dry.kr(1));\r\n\t\tOut.ar(\\fx.ir(~revBus), sig * (1-\\dry.kr(1)))\r\n\t}).add;\r\n\r\n\t// my go-to reverb\r\n\tSynthDef.new(\\reverb, {\r\n\t\tvar sig;\r\n\t\tsig = JPverb.ar(\r\n\t\t\tIn.ar(\\in.ir(~revBus), 2),\r\n\t\t\t\\rtime.kr(4),\r\n\t\t\t\\damp.kr(0.75),\r\n\t\t\t\\size.kr(4.5),\r\n\t\t\t\\earlyDiff.kr(0.8),\r\n\t\t\t\\modDepth.kr(0.12),\r\n\t\t\t\\modFreq.kr(2),\r\n\t\t\t\\low.kr(1),\r\n\t\t\t\\mid.kr(0.9),\r\n\t\t\t\\high.kr(0.8)\r\n\t\t);\r\n\t\tsig = sig * \\revAmp.kr(0.5);\r\n\tOut.ar(\\out.kr(~out), sig);\r\n\t}).add;\r\n\r\ns.sync;\r\n\r\nServerTree.add(~makeNodes);\r\ns.freeAll;\r\n\r\ns.sync;\r\n\"done\".postln;\r\n});\r\n)\r\n// start performance; modulate up to three of the \"marimbas\" via multitouch on Sensors2Osc\r\n(\r\n~marimba = 3.collect{\r\n\tSynth(\\marimba, [\\rq, 0.008, \\cf, (Scale.minorPentatonic.degrees+49).choose.midicps, \\dry, rrand(0.25,0.45)], ~mGr);\r\n};\r\n)\r\n\r\n// record if wanted\r\ns.record;\r\ns.stopRecording;\r\n\r\n// stop performance\r\n~mGr.set(\\gate, 0);\r\n\r\ns.quit;",
   "id" : "1-5eH",
   "is_private" : null,
   "labels" : []
}
