{
   "ancestor_list" : [],
   "description" : "My first composition that goes beyond tweaking documentation examples. It uses a kind of granular synthesis where each grain is a short AM synthesized fragment. No filters or other effects are used. With some OSC based \"score\" visualization from patterns. Using Pdef to dynamically replace patterns. Parameters related to distribution of the grains as well as the parameters of the AM synthesis (construction of the grains) are varied over time to create some evolution in the piece.",
   "author" : "56228375",
   "name" : "granular AM synthesis",
   "is_private" : null,
   "id" : "1-56u",
   "code" : "(\r\nvar movements = Array(7);\r\nvar slowstatic;\r\nvar slowmod, lessslowmod, increasedmod, fastmod, increasedfastmod, fastermod, biggerfastermod, slowermod, evenslowermod;\r\nvar deg1, deg2, deg3, deg4;\r\nvar envlen1, envlen2, envlen3;\r\nvar speed1, speed2,speed3, slowspeed;\r\nvar ampnormal;\r\nvar modamprising, modampdescending;\r\nvar width, height;\r\n\r\nvar colorValues;\r\nvar colors;\r\nvar label;\r\nvar labeltext = \"\";\r\nvar noteEvents;\r\n\r\n\r\n(\r\no = Server.local.options;\r\no.maxNodes = 10000;\r\no.memSize = 8192*2;\r\ns = Server.local;\r\ns.boot;\r\n);\r\n\r\nm = NetAddr(\"127.0.0.1\", NetAddr.langPort); // loopback\r\n\r\ns.waitForBoot({\r\n\t// AM synthesis\r\n\t(\r\n\t\tSynthDef(\\amsynth,\r\n\t\t\t{   | out = 0, freq = 440, freq_modulator = 300, amp = 0.5, amp_modulator = 0.5,\r\n\t\t\t\tenvlen=0.01, spread=0.5, center=0.0 |\r\n\t\t\t\tvar carrier = amp*SinOsc.ar(freq);\r\n\t\t\t\tvar modulator = amp_modulator*SinOsc.ar({freq_modulator});\r\n\t\t\t\tvar envelope = EnvGen.kr(Env.perc(envlen, 1, 1), doneAction:2);\r\n\t\t\t\tOut.ar(out, Splay.ar(envelope*carrier*modulator!2, spread, 1, center));\r\n\t\t}).add;\r\n\t);\r\n\r\n\tPdef(\\bg).fadeTime = 1.0;\r\n\r\n\t(\r\n\t\tslowmod = Pfunc({rrand(3,20)});\r\n\t\tlessslowmod = Pfunc({rrand(3,5)});\r\n\t\tincreasedmod = Pseries(3,0.1);\r\n\t\tfastmod = Pfunc({rrand(150,200)});\r\n\t\tincreasedfastmod = Pwhite(Pseries(200,0.1),Pseries(200,2));\r\n\t\tfastermod = Pfunc({rrand(150,1800)});\r\n\t\tbiggerfastermod = Pfunc({rrand(50,5000)});\r\n\t\tslowermod = Pwhite(150,Pseries(1800,-10));\r\n\t\tampnormal = Pfunc({rrand(0.01,0.03)});\r\n\t\tevenslowermod = Pwhite(Pseries(200,-5), Pseries(900,-25));\r\n\r\n\r\n\t\tdeg1 = Pn(Pstutter(100,[0,5,7,8]),inf);\r\n\t\tdeg2 = Pn(Pstutter(100,[0,5,7,9]),inf);\r\n\t\tdeg3 = Pn(Pstutter(100,[0,5,7,10]),inf);\r\n\t\tdeg4 = Pn(Pstutter(100,[0,5,7,11]),inf);\r\n\r\n\t\tenvlen1 = Pwrand([0.01,0.02,0.03,0.1,0.2,0.3,1,2,3],[0.0,0.0,0.1,0.0,0.1,0.1,2,2,2],inf);\r\n\t\tenvlen2 = Pwrand([0.01,0.02,0.03,0.1,0.2,0.3,1,2,3],[0.2,0.2,0.1,0.1,0.6,0.1,2,2,2],inf);\r\n\t\tenvlen3 = Pwrand([0.01,0.02,0.03,0.1,0.2,0.3,1,2,3],[0.6,0.6,0.6,0.02,0.02,0.02,0,0,0],inf);\r\n\t\tspeed1 = Prand([0.1,0.2,0.3],inf)/10;\r\n\t\tspeed2 = Prand([0.1,0.2,0.3],inf)/20;\r\n\t\tspeed3 = (Prand([0.1,0.2,0.3,0.4,0.5],inf)/Pgeom(20,0.99));\r\n\t\tslowspeed= Prand([0.1,0.2,0.3],inf);\r\n\r\n\t\tslowstatic =\r\n\t\tPbind(\\instrument, \\amsynth,\r\n\t\t\t\\freq_modulator, slowmod,\r\n\t\t\t\\amp, ampnormal,\r\n\t\t\t\\degree, deg1,\r\n\t\t\t\\dur, speed1,\r\n\t\t\t\\envlen, envlen1\r\n\t\t);\r\n\t);\r\n\r\n\t(\r\n\t\tmovements.add({\r\n\t\t\t\"*************************\".postln;\r\n\t\t\t\"*  Variations on 440Hz  *\".postln;\r\n\t\t\t\"*************************\".postln;\r\n\t\t\t\"*                       *\".postln;\r\n\t\t\t\"*   An exploration of   *\".postln;\r\n\t\t\t\"*       GRANULAR        *\".postln;\r\n\t\t\t\"*     AM SYNTHESIS      *\".postln;\r\n\t\t\t\"*                       *\".postln;\r\n\t\t\t\"*  (no filters, no fx)  *\".postln;\r\n\t\t\t\"*                       *\".postln;\r\n\t\t\t\"* Stefaan Himpe(shiihs) *\".postln;\r\n\t\t\t\"*************************\".postln;\r\n\t\t\t\"\".postln;\r\n\t\t});\r\n\t\tmovements.add({\r\n\t\t\tPdef(\\bg,\r\n\t\t\t\tPbindf(slowstatic,\r\n\t\t\t\t\t\\sendtogui, Pfunc({ |ev|\r\n\t\t\t\t\t\tm.sendMsg(\"/gui\", 1, ev[\\freq_modulator], ev[\\amp], ev[\\degree], ev[\\dur], ev[\\envlen]);\r\n\t\t\t\t\t});\r\n\t\t\t));\r\n\t\t\t\"Slow modulation (tremolo)\".postln;\r\n\t\t\t5.wait;\r\n\r\n\t\t\tPdef(\\bg,\r\n\t\t\t\tPbindf(slowstatic,\r\n\t\t\t\t\t\\freq_modulator, lessslowmod,\r\n\t\t\t\t\t\\sendtogui, Pfunc({ |ev|\r\n\t\t\t\t\t\tm.sendMsg(\"/gui\", 1, ev[\\freq_modulator], ev[\\amp], ev[\\degree], ev[\\dur], ev[\\envlen]);\r\n\t\t\t\t\t});\r\n\t\t\t));\r\n\t\t\t\"Speed up modulation\".postln;\r\n\t\t\t10.wait;\r\n\t\t});\r\n\t\tmovements.add({\r\n\t\t\t2.do({\r\n\t\t\t\tPdef(\\bg,\r\n\t\t\t\t\tPbindf(slowstatic,\r\n\t\t\t\t\t\t\\freq_modulator, lessslowmod,\r\n\t\t\t\t\t\t\\degree, deg2,\r\n\t\t\t\t\t\t\\sendtogui, Pfunc({ |ev|\r\n\t\t\t\t\t\t\tm.sendMsg(\"/gui\", 1, ev[\\freq_modulator], ev[\\amp], ev[\\degree], ev[\\dur], ev[\\envlen]);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t));\r\n\t\t\t\t\"Make a little melody\".postln;\r\n\r\n\t\t\t\t4.wait;\r\n\t\t\t\tPdef(\\bg,\r\n\t\t\t\t\tPbindf(slowstatic,\r\n\t\t\t\t\t\t\\freq_modulator, lessslowmod,\r\n\t\t\t\t\t\t\\degree, deg4,\r\n\t\t\t\t\t\t\\sendtogui, Pfunc({ |ev|\r\n\t\t\t\t\t\t\tm.sendMsg(\"/gui\", 1, ev[\\freq_modulator], ev[\\amp], ev[\\degree], ev[\\dur], ev[\\envlen]);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t));\r\n\t\t\t\t\"Make a little melody\".postln;\r\n\t\t\t\t4.wait;\r\n\t\t\t\tPdef(\\bg,\r\n\t\t\t\t\tPbindf(slowstatic,\r\n\t\t\t\t\t\t\\freq_modulator, lessslowmod,\r\n\t\t\t\t\t\t\\degree, deg3,\r\n\t\t\t\t\t\t\\sendtogui, Pfunc({ |ev|\r\n\t\t\t\t\t\t\tm.sendMsg(\"/gui\", 1, ev[\\freq_modulator], ev[\\amp], ev[\\degree], ev[\\dur], ev[\\envlen]);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t));\r\n\t\t\t\t\"Make a little melody\".postln;\r\n\t\t\t\t4.wait;\r\n\t\t\t\tPdef(\\bg,\r\n\t\t\t\t\tPbindf(slowstatic,\r\n\t\t\t\t\t\t\\freq_modulator, lessslowmod,\r\n\t\t\t\t\t\t\\degree, deg1,\r\n\t\t\t\t\t\t\\sendtogui, Pfunc({ |ev|\r\n\t\t\t\t\t\t\tm.sendMsg(\"/gui\", 1, ev[\\freq_modulator], ev[\\amp], ev[\\degree], ev[\\dur], ev[\\envlen]);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t));\r\n\t\t\t\t\"Make a little melody\".postln;\r\n\t\t\t\t6.wait;\r\n\t\t\t});\r\n\r\n\t\t\tPdef(\\bg,\r\n\t\t\t\tPbindf(slowstatic,\r\n\t\t\t\t\t\\freq_modulator, lessslowmod,\r\n\t\t\t\t\t\\degree, deg2,\r\n\t\t\t\t\t\\sendtogui, Pfunc({ |ev|\r\n\t\t\t\t\t\tm.sendMsg(\"/gui\", 1, ev[\\freq_modulator], ev[\\amp], ev[\\degree], ev[\\dur], ev[\\envlen]);\r\n\t\t\t\t\t});\r\n\t\t\t));\r\n\t\t\t\"Make a little melody\".postln;\r\n\t\t\t8.wait;\r\n\r\n\t\t\tPdef(\\bg,\r\n\t\t\t\tPbindf(slowstatic,\r\n\t\t\t\t\t\\freq_modulator, lessslowmod,\r\n\t\t\t\t\t\\sendtogui, Pfunc({ |ev|\r\n\t\t\t\t\t\tm.sendMsg(\"/gui\", 1, ev[\\freq_modulator], ev[\\amp], ev[\\degree], ev[\\dur], ev[\\envlen]);\r\n\t\t\t\t\t});\r\n\t\t\t));\r\n\t\t\t\"Make a little melody\".postln;\r\n\t\t\t4.wait;\r\n\t\t});\r\n\r\n\t\tmovements.add({\r\n\t\t\tPdef(\\bg,\r\n\t\t\t\tPbindf(slowstatic,\r\n\t\t\t\t\t\\freq_modulator, increasedmod,\r\n\t\t\t\t\t\\sendtogui, Pfunc({ |ev|\r\n\t\t\t\t\t\tm.sendMsg(\"/gui\", 1, ev[\\freq_modulator], ev[\\amp], ev[\\degree], ev[\\dur], ev[\\envlen]);\r\n\t\t\t\t\t});\r\n\t\t\t));\r\n\t\t\t\"Increasing modulator frequency\".postln;\r\n\t\t\t25.wait;\r\n\t\t});\r\n\r\n\t\tmovements.add({\r\n\t\t\tPdef(\\bg,\r\n\t\t\t\tPbindf(slowstatic,\r\n\t\t\t\t\t\\freq_modulator, fastmod,\r\n\t\t\t\t\t\\sendtogui, Pfunc({ |ev|\r\n\t\t\t\t\t\tm.sendMsg(\"/gui\", 1, ev[\\freq_modulator], ev[\\amp], ev[\\degree], ev[\\dur], ev[\\envlen]);\r\n\t\t\t\t\t});\r\n\t\t\t));\r\n\t\t\t\"Fast random modulator frequency\".postln;\r\n\t\t\t10.wait;\r\n\r\n\t\t\tPdef(\\bg,\r\n\t\t\t\tPbindf(slowstatic,\r\n\t\t\t\t\t\\freq_modulator, fastmod,\r\n\t\t\t\t\t\\envlen, envlen2,\r\n\t\t\t\t\t\\sendtogui, Pfunc({ |ev|\r\n\t\t\t\t\t\tm.sendMsg(\"/gui\", 1, ev[\\freq_modulator], ev[\\amp], ev[\\degree], ev[\\dur], ev[\\envlen]);\r\n\t\t\t\t\t});\r\n\t\t\t));\r\n\t\t\t\"Choose more short envelopes\".postln;\r\n\t\t\t5.wait;\r\n\r\n\t\t\tPdef(\\bg,\r\n\t\t\t\tPbindf(slowstatic,\r\n\t\t\t\t\t\\freq_modulator, fastmod,\r\n\t\t\t\t\t\\envlen, envlen3,\r\n\t\t\t\t\t\\sendtogui, Pfunc({ |ev|\r\n\t\t\t\t\t\tm.sendMsg(\"/gui\", 1, ev[\\freq_modulator], ev[\\amp], ev[\\degree], ev[\\dur], ev[\\envlen]);\r\n\t\t\t\t\t});\r\n\t\t\t));\r\n\t\t\t\"Reduce #long envelopes\".postln;\r\n\t\t\t5.wait;\r\n\r\n\t\t\tPdef(\\bg,\r\n\t\t\t\tPbindf(slowstatic,\r\n\t\t\t\t\t\\freq_modulator, increasedfastmod,\r\n\t\t\t\t\t\\envlen, envlen3,\r\n\t\t\t\t\t\\sendtogui, Pfunc({ |ev|\r\n\t\t\t\t\t\tm.sendMsg(\"/gui\", 1, ev[\\freq_modulator], ev[\\amp], ev[\\degree], ev[\\dur], ev[\\envlen]);\r\n\t\t\t\t\t});\r\n\t\t\t));\r\n\t\t\t\"Increase random modulator frequency range\".postln;\r\n\t\t\t15.wait;\r\n\r\n\t\t\tPdef(\\bg,\r\n\t\t\t\tPbindf(slowstatic,\r\n\t\t\t\t\t\\freq_modulator, fastermod,\r\n\t\t\t\t\t\\envlen, envlen3,\r\n\t\t\t\t\t\\sendtogui, Pfunc({ |ev|\r\n\t\t\t\t\t\tm.sendMsg(\"/gui\", 1, ev[\\freq_modulator], ev[\\amp], ev[\\degree], ev[\\dur], ev[\\envlen]);\r\n\t\t\t\t\t});\r\n\t\t\t));\r\n\t\t\t\"Bigger random modulator frequency range\".postln;\r\n\t\t\t15.wait;\r\n\r\n\t\t\tPdef(\\bg).fadeTime = 10.0;\r\n\r\n\t\t\tPdef(\\bg,\r\n\t\t\t\tPbindf(slowstatic,\r\n\t\t\t\t\t\\freq_modulator, biggerfastermod,\r\n\t\t\t\t\t\\envlen, envlen3,\r\n\t\t\t\t\t\\sendtogui, Pfunc({ |ev|\r\n\t\t\t\t\t\tm.sendMsg(\"/gui\", 1, ev[\\freq_modulator], ev[\\amp], ev[\\degree], ev[\\dur], ev[\\envlen]);\r\n\t\t\t\t\t});\r\n\t\t\t));\r\n\t\t\t\"Highest frequency times 5\".postln;\r\n\t\t\t15.wait;\r\n\t\t});\r\n\r\n\t\tmovements.add({\r\n\t\t\tPdef(\\bg,\r\n\t\t\t\tPbindf(slowstatic,\r\n\t\t\t\t\t\\freq_modulator, biggerfastermod,\r\n\t\t\t\t\t\\envlen, envlen3,\r\n\t\t\t\t\t\\dur, speed2,\r\n\t\t\t\t\t\\sendtogui, Pfunc({ |ev|\r\n\t\t\t\t\t\tm.sendMsg(\"/gui\", 1, ev[\\freq_modulator], ev[\\amp], ev[\\degree], ev[\\dur], ev[\\envlen]);\r\n\t\t\t\t\t});\r\n\t\t\t));\r\n\t\t\t\"Faster speed\".postln;\r\n\t\t\t15.wait;\r\n\r\n\t\t\tPdef(\\bg,\r\n\t\t\t\tPbindf(slowstatic,\r\n\t\t\t\t\t\\freq_modulator,biggerfastermod,\r\n\t\t\t\t\t\\envlen, envlen3,\r\n\t\t\t\t\t\\dur, speed3,\r\n\t\t\t\t\t\\sendtogui, Pfunc({ |ev|\r\n\t\t\t\t\t\tm.sendMsg(\"/gui\", 1, ev[\\freq_modulator], ev[\\amp], ev[\\degree], ev[\\dur], ev[\\envlen]);\r\n\t\t\t\t\t});\r\n\t\t\t));\r\n\t\t\t\"Slow down speed\".postln;\r\n\t\t\t15.wait;\r\n\r\n\t\t\tPdef(\\bg).fadeTime = 1.0;\r\n\r\n\t\t\tPdef(\\bg,\r\n\t\t\t\tPbindf(slowstatic,\r\n\t\t\t\t\t\\freq_modulator,biggerfastermod,\r\n\t\t\t\t\t\\envlen,envlen2,\r\n\t\t\t\t\t\\dur,slowspeed,\r\n\t\t\t\t\t\\sendtogui, Pfunc({ |ev|\r\n\t\t\t\t\t\tm.sendMsg(\"/gui\", 1, ev[\\freq_modulator], ev[\\amp], ev[\\degree], ev[\\dur], ev[\\envlen]);\r\n\t\t\t\t\t});\r\n\t\t\t));\r\n\t\t\t\"Longer envelopes\".postln;\r\n\t\t\t10.wait;\r\n\r\n\t\t\tPdef(\\bg,\r\n\t\t\t\tPbindf(slowstatic,\r\n\t\t\t\t\t\\freq_modulator,biggerfastermod,\r\n\t\t\t\t\t\\envlen,envlen1,\r\n\t\t\t\t\t\\dur,slowspeed,\r\n\t\t\t\t\t\\sendtogui, Pfunc({ |ev|\r\n\t\t\t\t\t\tm.sendMsg(\"/gui\", 1, ev[\\freq_modulator], ev[\\amp], ev[\\degree], ev[\\dur], ev[\\envlen]);\r\n\t\t\t\t\t});\r\n\t\t\t));\r\n\t\t\t\"Even longer envelopes\".postln;\r\n\t\t\t10.wait;\r\n\r\n\t\t\tPdef(\\bg,\r\n\t\t\t\tPbindf(slowstatic,\r\n\t\t\t\t\t\\freq_modulator,fastermod,\r\n\t\t\t\t\t\\envlen,envlen1,\r\n\t\t\t\t\t\\dur,slowspeed,\r\n\t\t\t\t\t\\sendtogui, Pfunc({ |ev|\r\n\t\t\t\t\t\tm.sendMsg(\"/gui\", 1, ev[\\freq_modulator], ev[\\amp], ev[\\degree], ev[\\dur], ev[\\envlen]);\r\n\t\t\t\t\t});\r\n\t\t\t));\r\n\t\t\t\"Reduce highest freq\".postln;\r\n\t\t\t5.wait;\r\n\r\n\t\t\tPdef(\\bg,\r\n\t\t\t\tPbindf(slowstatic,\r\n\t\t\t\t\t\\freq_modulator,slowermod,\r\n\t\t\t\t\t\\envlen,envlen1,\r\n\t\t\t\t\t\\dur,slowspeed,\r\n\t\t\t\t\t\\sendtogui, Pfunc({ |ev|\r\n\t\t\t\t\t\tm.sendMsg(\"/gui\", 1, ev[\\freq_modulator], ev[\\amp], ev[\\degree], ev[\\dur], ev[\\envlen]);\r\n\t\t\t\t\t});\r\n\t\t\t));\r\n\t\t\t\"Further reduce highest freq\".postln;\r\n\t\t\t15.wait;\r\n\t\t});\r\n\t\tmovements.add({\r\n\r\n\t\t\tPdef(\\bg,\r\n\t\t\t\tPbindf(slowstatic,\r\n\t\t\t\t\t\\freq_modulator,evenslowermod,\r\n\t\t\t\t\t\\envlen,envlen1,\r\n\t\t\t\t\t\\dur,slowspeed,\r\n\t\t\t\t\t\\sendtogui, Pfunc({ |ev|\r\n\t\t\t\t\t\tm.sendMsg(\"/gui\", 1, ev[\\freq_modulator], ev[\\amp], ev[\\degree], ev[\\dur], ev[\\envlen]);\r\n\t\t\t\t\t});\r\n\t\t\t));\r\n\t\t\t\"Further slow down to initial settings\".postln;\r\n\t\t\t5.wait;\r\n\t\t});\r\n\t);\r\n\r\n\t(\r\n\t\twidth = 1280;\r\n\t\theight = 720;\r\n\t\tcolorValues = (\r\n\t\t\tbackground: \"d0d0ff\",\r\n\t\t\tchord: \"00aabb\",\r\n\t\t\tsplotch: \"f43530\",\r\n\t\t\tharmonics: \"46454b\",\r\n\t\t\t0 : \"28ff00\",\r\n\t\t\t1 : \"00fff2\",\r\n\t\t\t2 : \"007aff\",\r\n\t\t\t3 : \"0500ff\",\r\n\t\t\t4 : \"4700ed\",\r\n\t\t\t5 : \"6300b2\",\r\n\t\t\t6 : \"ae0000\",\r\n\t\t\t7 : \"ff0000\",\r\n\t\t\t8 : \"ff33ff\",\r\n\t\t\t9 : \"ff6600\",\r\n\t\t\t10 : \"ffef00\",\r\n\t\t\t11 : \"99ff00\",\r\n\t\t\tblend2: \"ff66cc\",\r\n\t\t\tblend1: \"ffff00\"\r\n\t\t);\r\n\t\tcolors = colorValues.collect({|item| Color.fromHexString(item)});\r\n\t\tnoteEvents = Array.fill(30, { List.new(5) });\r\n\r\n\t\to=OSCFunc({|msg| switch( msg[1].asInteger,\r\n\t\t\t1, {\r\n\t\t\t\tvar freq_modulator = msg[2];\r\n\t\t\t\tvar amp = msg[3];\r\n\t\t\t\tvar degree = [ msg[4][3], msg[4][15], msg[4][19], msg[4][23] ]; // TODO: decent osc blob decoding...\r\n\t\t\t\tvar dur = msg[5];\r\n\t\t\t\tvar envlen = msg[6];\r\n\t\t\t\tnoteEvents[0].add([freq_modulator, amp, degree, dur, envlen]);\r\n\t\t\t},\r\n\t\t\t2, {\r\n\t\t\t\tmsg[2].postln;\r\n\t\t\t\tlabeltext = msg[2];\r\n\t\t\t}\r\n\r\n\t\t)}, '/gui');\r\n\r\n\t\tw = Window(bounds: Rect(0, 0, width, height));\r\n\t\tv = UserView(w, w.view.bounds);\r\n\r\n\t\tv.animate = true;\r\n\t\tv.background = colors['background'];\r\n\t\tlabel = StaticText(v, Rect(40, 15, width-40, 50));\r\n\t\tlabel.font = Font(\"Helvetica\", 45, true);\r\n\t\tlabel.align = \\center;\r\n\t\tlabel.stringColor = colors['harmonics'];\r\n\r\n\t\tv.drawFunc = {\r\n\t\t\tlabel.string = labeltext;\r\n\r\n\t\t\tnoteEvents.do{ |item, i|\r\n\t\t\t\titem.do{ |subItem|\r\n\t\t\t\t\tvar degrees = subItem[2];\r\n\t\t\t\t\tvar amp = subItem[1];\r\n\t\t\t\t\tvar barheight = 20;\r\n\t\t\t\t\tvar ampscaled = amp.explin(0.01,0.03,0,1);\r\n\t\t\t\t\tPen.alpha = 27;\r\n\r\n\t\t\t\t\tdegrees.do({ | item, i |\r\n\t\t\t\t\t\tPen.fillColor = colors[(degrees[i] % 12)];\r\n\t\t\t\t\t\tPen.addRect(Rect(0, degrees[i].linlin(-1,12,height, 0)+(barheight*(ampscaled/2.0)), w.bounds.width, barheight*ampscaled));\r\n\t\t\t\t\t\tPen.perform(\\fill);\r\n\t\t\t\t\t});\r\n\t\t\t\t};\r\n\t\t\t};\r\n\r\n\t\t\tnoteEvents.do{ |item, i|\r\n\t\t\t\tPen.fillColor = colors['splotch'];\r\n\t\t\t\tPen.alpha = (30-i).linexp(1,27,0.01,1);\r\n\t\t\t\titem.do{ |subItem|\r\n\t\t\t\t\tvar freq_modulator = subItem[0];\r\n\t\t\t\t\tvar amp = subItem[1];\r\n\t\t\t\t\tvar dur = subItem[3].asFloat;\r\n\t\t\t\t\tvar envlen = subItem[4].asFloat;\r\n\t\t\t\t\tPen.fillColor = colors['blend1'].blend(colors['blend2'],amp.explin(0.01,0.03,0,1));\r\n\t\t\t\t\tPen.alpha = (30-i).linexp(1,27,0.01,1);\r\n\t\t\t\t\tPen.fillOval(Rect.aboutPoint(\r\n\t\t\t\t\t\tdur.linexp(0,0.3,(3*width/4),(width/4)) @ freq_modulator.explin(3,5000,height,0),\r\n\t\t\t\t\t\tenvlen.explin(0.01, 3, 1, 10)*(30-i).linlin(1,300,1,75),\r\n\t\t\t\t\t\tenvlen.explin(0.01, 3, 1, 10)*(30-i).linlin(1,300,1,75)));\r\n\t\t\t\t};\r\n\t\t\t};\r\n\t\t\tnoteEvents = noteEvents.shift(1, List.new(5));\r\n\t\t};\r\n\r\n\t\tw.onClose_({\r\n\t\t\tPdef(\\bg).fadeTime = 20.0;\r\n\t\t\tPdef(\\bg).stop;\r\n\t\t\tPdef(\\bg).clear;\r\n\t\t});\r\n\r\n\t\tw.front;\r\n\t);\r\n\r\n\tPdef(\\bg).play;\r\n\tmovements[0].();\r\n\tm.sendMsg(\"/gui\",2,\"***   Introduction    ***\");\r\n\tmovements[1].();\r\n\tm.sendMsg(\"/gui\",2,\"***    Swan Song     ***\");\r\n\tmovements[2].();\r\n\tm.sendMsg(\"/gui\",2,\"***  Transfiguration  ***\");\r\n\tmovements[3].();\r\n\tm.sendMsg(\"/gui\",2,\"***    Tube Travel    ***\");\r\n\tmovements[4].();\r\n\tm.sendMsg(\"/gui\",2,\"***   Drowsy Drips    ***\");\r\n\tmovements[5].();\r\n\tm.sendMsg(\"/gui\",2,\"***   Sweet Dreams    ***\");\r\n\tmovements[6].();\r\n\tm.sendMsg(\"/gui\",2,\"***   Welcome Back    ***\");\r\n\tmovements[1].();\r\n\tm.sendMsg(\"/gui\",2,\"***  We\\'ve Missed You ***\");\r\n\tmovements[2].();\r\n\tm.sendMsg(\"/gui\",2,\"\");\r\n\tmovements[0].();\r\n\tPdef(\\bg).fadeTime = 20.0;\r\n\tPdef(\\bg).stop;\r\n\tPdef(\\bg).clear;\r\n});\r\n);",
   "labels" : [
      "gui",
      "patterns",
      "osc",
      "amplitude modulation",
      "granular synthesis",
      "visualization"
   ]
}
