{
   "description" : "Experimental class - ambient cavern sounds (no effects yet).  Class format is used here - needs to be saved as .sc file in the extensions and run with \"Synth3.new\" from the IDE.  The class template comes from \"mapping and visualization\".",
   "ancestor_list" : [],
   "author" : "Scott L Simon",
   "name" : "Cavern_Class",
   "code" : "Synth3{\r\n\t\r\n\t\r\n\tvar mInput;\r\n\tvar mSynth;\r\n\tvar mWin;\r\n\tvar filter1, filter2, filter_2a, length;\r\n\t\r\n\t\r\n\t*new { arg xx;\r\n\t\t^super.new.init(xx);\r\n\t}\r\n\t\r\n\tinit { arg xx;\r\n\t\t\r\n\t\tfilter1 = 2000;\r\n\t\tfilter2 = 2000;\r\n\t\tfilter_2a =2000;\r\n\t\tlength = 0.3;\r\n\t\tServer.default.waitForBoot({fork{\r\n\t\t\r\n\t\t\tServer.default.sync; \r\n\t\t\t\r\n\t\t\tthis.addSynthDef.value; \r\n\t\t\t{ this.makeGui.value; }.defer; \r\n\t\t}});\r\n\t}\r\n\t\r\n\taddSynthDef { \r\n\t\tSynthDef(\\testz, { arg out = 0, amp = 1,  bPassF = 2000, hPassF = 3000, \r\n\t\t\tpan = 0, decay = 0.06, filtF = 400, amp_z =1;\r\n\t\t\tvar z = BPF.ar(BrownNoise.ar(0.8.dup), bPassF, 0.2, mul: amp);\r\n\t\t\tvar z2 = HPF.ar(z, hPassF, 0.2, mul: amp);\r\n\t\t\tvar env = EnvGen.kr(Env.perc(0.01, decay), doneAction: 2);\r\n\t\t\tOut.ar(out, Pan2.ar(LPF.ar(z, filtF), pan, env*amp_z));\r\n\t\t}).add;\r\n\t\t\r\n\t\tSynthDef(\\testz2, { arg out = 0, amp = 1,  bPassF2 = 2000, hPassF = 3000, \r\n\t\t\tpan = 0, decay = 0.06, filtF2 = 400, amp_z =1;\r\n\t\t\t\r\n\t\t\tvar z = BPF.ar(GrayNoise.ar(1.0.dup), bPassF2, 0.2, mul: amp);\r\n\t\t\tvar z2 = HPF.ar(z, hPassF, 0.2, mul: amp);\r\n\t\t\tvar env = EnvGen.kr(Env.perc(0.01, decay), doneAction: 2);\r\n\t\t\tOut.ar(out, Pan2.ar(LPF.ar(z2, filtF2), pan, env*amp_z));\r\n\t\t}).add;\r\n\t\t\r\n\t\tServer.default.sync;\r\n\t}\r\n\t\r\n\tmakeGui{ \r\n\r\n\t\tQtGUI.palette = QPalette.dark;\r\n\t\t\r\n\t\t// main window (for now)\r\n\t\tmWin = Window.new(\"Synther1\",\r\n\t\t\tRect( left:20, top:20,\r\n\t\t\t\twidth: 300, height: 400 ),border: true);\r\n\t\tmWin.background = Color.blue(0.3,1);\r\n\t\t\r\n\t\t\r\n\t\tmWin.layout = HLayout(\r\n\t\t\t\r\n\t\t\tVLayout(\r\n\t\t\t\t\r\n\t\t\t\tStaticText().string_(\"Cavern_1\"),\r\n\t\t\t\tButton()\r\n\t\t\t\t.states_([\r\n\t\t\t\t\t[\"OFF\", Color.gray(0.2), Color.green(0.8)],\r\n\t\t\t\t\t[\"ON\", Color.gray(0.8), Color.grey(0.2)] ])\r\n\t\t\t\t.mouseDownAction_({\r\n\t\t\t\t\targ state;\r\n\t\t\t\t\tstate.value.postln;\r\n\t\t\t\t\tif (state.value == 0) {\r\n\t\t\t\t\t\tmSynth = (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tPbind(\r\n\\instrument,      Prand([\\testz,\\testz2],inf),\r\n\\bPassf,          Pwhite(100,12000, inf),\r\n\\bPassF2,         Pfunc{filter2},\r\n\\decay,           Pfunc{length},\r\n\\hPassf,          Pwhite(100,13000, inf),\r\n\\pan,             Pwhite(0.0, 1, inf),\r\n\\filtF,           Pfunc{filter1},\r\n\\filtF2,          Pwhite(80, 20000, inf),\r\n\\dur,             Pwhite(0.01,0.3,inf);\r\n).play;)} {\r\n\t\t\t\t\t\tmSynth.stop;\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.minHeight_(70)\r\n\t\t\t\t.minWidth_(70),\r\n\t\t\t\tnil\r\n\t\t\t),\r\n\t\t\t\r\n\t\t\tVLayout(\r\n\t\t\t\t\r\n\t\t\t\tStaticText().string_(\"Filter\"),\r\n\t\t\t\tSlider2D()\r\n\t\t\t\t.x_(0.05)\r\n\t\t\t\t.y_(0.05)\r\n\t\t\t\t.action_({ arg slider;\r\n\t\t\t\t\t\r\n\t\t\t\t\tfilter1 = slider.y.value.linexp(0,1,300,20000,nil);\r\n\t\t\t\t\tfilter2 = slider.x.value.linexp(0,1,30,20000,nil);\r\n\t\t\t\t\t\r\n\t\t\t\t}),\r\n\t\t\t\tStaticText().string_(\"Grain Length\"),\r\n\t\t\t\tSlider(nil,Rect(0,0,50,10))\r\n\t\t\t\t.minHeight_(20)\r\n\t\t\t\t.thumbSize_(50)\r\n\t\t\t\t.action_({ arg slider2;\r\n\t\t\t\t\t\r\n\t\t\t\t\tlength = slider2.value.linexp(0,1,0.06,0.5,nil);\r\n\t\t\t\t\t\r\n\t\t\t\t})\r\n\t\t\t),\r\n\t\t);\r\n\t\t\r\n\t\tmWin.front;\r\n\t\tmWin.alwaysOnTop = true;\r\n\t\t\r\n\t\tmWin.onClose_({\r\n\t\t\tmSynth.stop;\r\n\t\t})\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t}\r\n}",
   "id" : "1-5bw",
   "is_private" : null,
   "labels" : [
      "gui",
      "class",
      "synthesis"
   ]
}
