{
   "name" : "spawnBufGranulizer",
   "author" : "bateslewis",
   "description" : "pattern based granulizer using Pspawn - a work in progress",
   "ancestor_list" : [],
   "labels" : [],
   "code" : "//A sample granulizer using spawned patterns\r\n//might be easiest to learn controls using pan\r\n//wslib quark required\r\n\r\n//NICOLE = child stream\r\n//centr = the basic static value of that variable\r\n//shift = the amount of change from grain to grain in a single pbind stream (mostly bi-directional, use <> buttons for rate & filter)\r\n//dev = the amount of random deviation from centre using the distribution from the pop-up next to it\r\n\r\n//PAPA = parent stream\r\n//step = the step value used if a brownian distribution is chosen from pop-up in nicole\r\n//shift∆ = the amount of change from stream to stream created by the spawner (use <> just above for rate & filter directionality here)\r\n//dev∆ = the change in the amount of random deviation from stream to stream created by the spawner\r\n//some of the random deviations can 'pass thru zero\"\r\n\r\n//idiosyncrasies: the large button in the nicole/rate section changes play direction forw/back\r\n//the \"Ƅ\" symbol in the papa/length section refers to bend - controls the random deviation parameters for bend amount\r\n// the distribution type pop-up for the papa/delta is in the nicole section under the envelope selector\r\n//in the nicole/filter section there is a knob to control HPF cutoff\r\n//note also the gauss distribution requires much lower setting of dev than either Rand or Brown here\r\n\r\n//some symbols have been used from the Mac character viewer - yet to find out if these are Windows compatible\r\n\r\n//haven't been on SC too long but thought it might be fun for others to play around with too\r\n//it is a work in progress\r\n\r\n(\r\nRoutine.run{\r\n\r\n\r\ny = (Platform.resourceDir +/+ \"sounds/a11wlk01.wav\");\r\n\ts.sync;\r\nb = Buffer.read(s, y);\r\n\ts.sync;\r\na = b.numFrames;\r\n\ts.sync;\r\n\r\n\r\n\r\n(\r\nSynthDef(\\bufGab, { |amp=1, rate=1.0, bend=1.0, pos=1000, sus=0.05, pan=0, filter=22000, hiPass=20, vol=1|\r\n\tvar snd = HPF.ar((LPF.ar((PlayBuf.ar(1, b, Line.ar((rate*BufRateScale.kr(b)), (rate*BufRateScale.kr(b)*bend), sus),\r\n\t\t                                 1, pos, 0, 2)), filter)),hiPass);\r\n\tvar env = EnvGen.ar(Env.sine(sus, amp), doneAction: 2);\r\n\tvar kak = Pan2.ar(snd * env, pan, vol);\r\n\tOut.ar(4, kak);\r\n\tOffsetOut.ar(0, kak);\r\n}, \\ir ! 9).add;\r\n\r\nSynthDef(\\bufWide, { |amp=1, rate=1.0, bend=1.0, pos=1000, sus=0.05, pan=0, width=0.5, filter=22000, hiPass=20, vol=1|\r\n\tvar holdT = sus * width;\r\n\tvar fadeT = 1 - width * sus * 0.5;\r\n\tvar snd = HPF.ar((LPF.ar((PlayBuf.ar(1, b, Line.ar((rate*BufRateScale.kr(b)), (rate*BufRateScale.kr(b)*bend), (fadeT*2+holdT)),\r\n\t\t                                 1, pos, 0, 2)), filter)),hiPass);\r\n\tvar env = EnvGen.ar(Env([0, 1, 1, 0], [fadeT, holdT, fadeT], \\sin),\r\n\t\tlevelScale: amp,\r\n\t\tdoneAction: 2);\r\n\tvar kak = Pan2.ar(snd * env, pan, vol);\r\n\tOut.ar(4, kak);\r\n\tOffsetOut.ar(0, kak);\r\n}, \\ir ! 10).add;\r\n\r\nSynthDef(\\bufPerc, { |amp=1, rate=1.0, bend=1.0, pos=1000, sus=0.05, pan=0, filter=22000, hiPass=20, vol=1|\r\n\tvar snd = HPF.ar((LPF.ar((PlayBuf.ar(1, b, Line.ar((rate*BufRateScale.kr(b)), (rate*BufRateScale.kr(b)*bend), sus),\r\n\t\t                                 1, pos, 0, 2)), filter)),hiPass);\r\n\tvar env = EnvGen.ar(\r\n\t\tEnv.perc(0.1, 0.9, amp),\r\n\t\t\ttimeScale: sus, doneAction: 2);\r\n\tvar kak = Pan2.ar(snd * env, pan, vol);\r\n\tOut.ar(4, kak);\r\n\tOffsetOut.ar(0, kak);\r\n}, \\ir ! 9).add;\r\n\r\nSynthDef(\\bufPercRev, { |amp=0.1, rate=1.0, bend=1.0, pos=1, sus=0.05, pan=0, filter=22000, hiPass=20, vol=1|\r\n\tvar snd = HPF.ar((LPF.ar((PlayBuf.ar(1, b, Line.ar((rate*BufRateScale.kr(b)), (rate*BufRateScale.kr(b)*bend), sus),\r\n\t\t                                 1, pos, 0, 2)), filter)),hiPass);\r\n\tvar env = EnvGen.ar(\r\n\t\tEnv.perc(0.9, 0.1, amp, 4),\r\n\t\t\ttimeScale: sus, doneAction: 2);\r\n\tvar kak = Pan2.ar(snd * env, pan, vol);\r\n\tOut.ar(4, kak);\r\n\tOffsetOut.ar(0, kak);\r\n}, \\ir ! 9).add;\r\n\r\nSynthDef(\\Cator, {\r\n\t          var imp, delimp, listen;\r\n\t          imp = Impulse.kr(20);\r\n\t          delimp = Delay1.kr(imp);\r\n\t          listen = In.ar(4, 2);\r\n\t          SendReply.kr(imp, '/levels', [Amplitude.kr(listen), K2A.ar(Peak.ar(listen, delimp).lag(0, 1))]);\r\n}).add;\r\n);\r\n\r\n\r\n\r\n\r\ns.sync;\r\n\r\n\r\ndefer{\r\n~w = Window(\"vOwel moGrains\", Rect(400, 80, 830, 784))\r\n           .background = Color.white;\r\n\r\n//PAPA\r\n\r\n~papa = CompositeView(~w, Rect(15, 15, 345, 754))\r\n                     .background = Color.new255(190, 190, 190);\r\n\r\n~pap = StaticText(~papa, Rect(10, 3, 325, 26))\r\n                 .string = \"PAPA\";\r\n~pap.background = Color.new255(190, 190, 190);\r\n~pap.align = \\center;\r\n~pap.font = Font(\"Abadi MT Condensed Extra Bold\", 20);\r\n~pap.stringColor = Color.white;\r\n\r\n~papaLengthBak = CompositeView(~papa, Rect(8, 40, 318, 53))\r\n                              .background = Color.new255(105, 105, 105);\r\n\r\n~papaLengthWind = CompositeView(~papaLengthBak, Rect(3, 3, 312, 47))\r\n                               .background = Color.white;\r\n\r\n~spawnBak = CompositeView(~papa, Rect(8, 98, 318, 95))\r\n                         .background = Color.new255(105, 105, 105);\r\n\r\n~spawnWind = CompositeView(~spawnBak, Rect(3, 3, 312, 89))\r\n                          .background = Color.white;\r\n\r\n~papaPosBak = CompositeView(~papa, Rect(8, 198, 318, 74))\r\n                           .background = Color.new255(105, 105, 105);\r\n\r\n~papaPosWind = CompositeView(~papaPosBak, Rect(3, 3, 312, 68))\r\n                            .background = Color.white;\r\n\r\n~papaRateBak = CompositeView(~papa, Rect(8, 277, 318, 74))\r\n                           .background = Color.new255(105, 105, 105);\r\n\r\n~papaRateWind = CompositeView(~papaRateBak, Rect(3, 3, 312, 68))\r\n                            .background = Color.white;\r\n\r\n~papaFilterBak = CompositeView(~papa, Rect(8, 356, 318, 74))\r\n                           .background = Color.new255(105, 105, 105);\r\n\r\n~papaFilterWind = CompositeView(~papaFilterBak, Rect(3, 3, 312, 68))\r\n                            .background = Color.white;\r\n\r\n~papaDurBak = CompositeView(~papa, Rect(8, 435, 318, 74))\r\n                           .background = Color.new255(105, 105, 105);\r\n\r\n~papaDurWind = CompositeView(~papaDurBak, Rect(3, 3, 312, 68))\r\n                            .background = Color.white;\r\n\r\n~papaDensityBak = CompositeView(~papa, Rect(8, 514, 318, 74))\r\n                           .background = Color.new255(105, 105, 105);\r\n\r\n~papaDensityWind = CompositeView(~papaDensityBak, Rect(3, 3, 312, 68))\r\n                            .background = Color.white;\r\n\r\n~papaAmpBak = CompositeView(~papa, Rect(8, 593, 318, 74))\r\n                           .background = Color.new255(105, 105, 105);\r\n\r\n~papaAmpWind = CompositeView(~papaAmpBak, Rect(3, 3, 312, 68))\r\n                            .background = Color.white;\r\n\r\n~papaPanBak = CompositeView(~papa, Rect(8, 672, 318, 74))\r\n                           .background = Color.new255(105, 105, 105);\r\n\r\n~papaPanWind = CompositeView(~papaPanBak, Rect(3, 3, 312, 68))\r\n                            .background = Color.white;\r\n\r\n\r\n//NICOLE\r\n\r\n~nicole = CompositeView(~w, Rect(365, 15, 411, 754))\r\n                       .background = Color.new255(190, 190, 190);\r\n\r\n~nic = StaticText(~nicole, Rect(10, 3, 388, 26))\r\n                 .string = \"nicole\";\r\n~nic.background = Color.new255(190, 190, 190);\r\n~nic.align = \\center;\r\n~nic.font = Font(\"Abadi MT Condensed Extra Bold\", 20);\r\n~nic.stringColor = Color.white;\r\n\r\n~nicoleLengthBak = CompositeView(~nicole, Rect(19, 40, 392, 74))\r\n                                .background = Color.new255(105, 105, 105);\r\n\r\n~nicoleLengthWind = CompositeView(~nicoleLengthBak, Rect(3, 3, 389, 68))\r\n                                 .background = Color.white;\r\n\r\n\r\n~soundFile = CompositeView(~nicole, Rect(19, 119, 392, 74))\r\n                          .background = Color.new255(105, 105, 105);\r\n\r\n~soundFileBak = CompositeView(~soundFile, Rect(3, 3, 389, 68))\r\n                          .background = Color.new255(190, 190, 190);\r\n\r\n~view = SoundFileView.new(~soundFileBak, Rect(52, 0, 186, 68)).gridOn_(false);\r\n~viewFile = SoundFile.new;\r\n~viewFile.openRead(y);\r\n~view.soundfile = ~viewFile;\r\n~view.read(0, ~viewFile.numFrames);\r\n~view.background = Color.white;\r\n~view.backColor = Color.new255(190, 190, 190);\r\n~view.refresh;\r\n\r\n~extraBitH = CompositeView(~w, Rect(776, 205, 36, 3))\r\n                           .background = Color.new255(105, 105, 105);\r\n\r\n~extraBitV = CompositeView(~w, Rect(812, 205, 3, 600))\r\n                           .background = Color.new255(105, 105, 105);\r\n\r\n~posBak = CompositeView(~nicole, Rect(19, 198, 384, 74))\r\n                       .background = Color.new255(105, 105, 105);\r\n\r\n~posWind = CompositeView(~posBak, Rect(3, 3, 378, 68))\r\n                        .background = Color.white;\r\n\r\n~rateBak = CompositeView(~nicole, Rect(19, 277, 384, 74))\r\n                       .background = Color.new255(105, 105, 105);\r\n\r\n~rateWind = CompositeView(~rateBak, Rect(3, 3, 378, 68))\r\n                        .background = Color.white;\r\n\r\n~filterBak = CompositeView(~nicole, Rect(19, 356, 384, 74))\r\n                       .background = Color.new255(105, 105, 105);\r\n\r\n~filterWind = CompositeView(~filterBak, Rect(3, 3, 378, 68))\r\n                        .background = Color.white;\r\n\r\n~durBak = CompositeView(~nicole, Rect(19, 435, 384, 74))\r\n                       .background = Color.new255(105, 105, 105);\r\n\r\n~durWind = CompositeView(~durBak, Rect(3, 3, 378, 68))\r\n                        .background = Color.white;\r\n\r\n~densityBak = CompositeView(~nicole, Rect(19, 514, 384, 74))\r\n                       .background = Color.new255(105, 105, 105);\r\n\r\n~densityWind = CompositeView(~densityBak, Rect(3, 3, 378, 68))\r\n                        .background = Color.white;\r\n\r\n~ampBak = CompositeView(~nicole, Rect(19, 593, 384, 74))\r\n                       .background = Color.new255(105, 105, 105);\r\n\r\n~ampWind = CompositeView(~ampBak, Rect(3, 3, 378, 68))\r\n                        .background = Color.white;\r\n\r\n~panBak = CompositeView(~nicole, Rect(19, 672, 384, 74))\r\n                       .background = Color.new255(105, 105, 105);\r\n\r\n~panWind = CompositeView(~panBak, Rect(3, 3, 378, 68))\r\n                        .background = Color.white;\r\n\r\n\r\n\r\n//LABELS\r\n\r\n\r\n~nicLengthLabel = StaticText(~w, Rect(338, 83, 49, 18))\r\n                                .string = \"length\";\r\n~nicLengthLabel.background = Color.new255(105, 105, 105);\r\n~nicLengthLabel.align = \\center;\r\n~nicLengthLabel.font = Font(\"Helvetica Neue Bold Condensed\", 12);\r\n~nicLengthLabel.stringColor = Color.white;\r\n\r\n~spawnLabel = StaticText(~w, Rect(338, 162, 49, 18))\r\n                            .string = \"DELTA\";\r\n~spawnLabel.background = Color.new255(105, 105, 105);\r\n~spawnLabel.align = \\center;\r\n~spawnLabel.font = Font(\"Helvetica Neue Bold Condensed\", 12);\r\n~spawnLabel.stringColor = Color.white;\r\n\r\n~posLabel = StaticText(~w, Rect(338, 241, 49, 18))\r\n                            .string = \"pos\";\r\n~posLabel.background = Color.new255(105, 105, 105);\r\n~posLabel.align = \\center;\r\n~posLabel.font = Font(\"Helvetica Neue Bold Condensed\", 13);\r\n~posLabel.stringColor = Color.white;\r\n\r\n~rateLabel = StaticText(~w, Rect(338, 320, 49, 18))\r\n                            .string = \"rate\";\r\n~rateLabel.background = Color.new255(105, 105, 105);\r\n~rateLabel.align = \\center;\r\n~rateLabel.font = Font(\"Helvetica Neue Bold Condensed\", 13);\r\n~rateLabel.stringColor = Color.white;\r\n\r\n~filterLabel = StaticText(~w, Rect(338, 399, 49, 18))\r\n                            .string = \"filter\";\r\n~filterLabel.background = Color.new255(105, 105, 105);\r\n~filterLabel.align = \\center;\r\n~filterLabel.font = Font(\"Helvetica Neue Bold Condensed\", 13);\r\n~filterLabel.stringColor = Color.white;\r\n\r\n~durLabel = StaticText(~w, Rect(338, 478, 49, 18))\r\n                            .string = \"dur\";\r\n~durLabel.background = Color.new255(105, 105, 105);\r\n~durLabel.align = \\center;\r\n~durLabel.font = Font(\"Helvetica Neue Bold Condensed\", 13);\r\n~durLabel.stringColor = Color.white;\r\n\r\n~densityLabel = StaticText(~w, Rect(338, 557, 49, 18))\r\n                            .string = \"delta\";\r\n~densityLabel.background = Color.new255(105, 105, 105);\r\n~densityLabel.align = \\center;\r\n~densityLabel.font = Font(\"Helvetica Neue Bold Condensed\", 13);\r\n~densityLabel.stringColor = Color.white;\r\n\r\n~ampLabel = StaticText(~w, Rect(338, 636, 49, 18))\r\n                            .string = \"amp\";\r\n~ampLabel.background = Color.new255(105, 105, 105);\r\n~ampLabel.align = \\center;\r\n~ampLabel.font = Font(\"Helvetica Neue Bold Condensed\", 13);\r\n~ampLabel.stringColor = Color.white;\r\n\r\n~panLabel = StaticText(~w, Rect(338, 715, 49, 18))\r\n                          .string = \"pan\";\r\n~panLabel.background = Color.new255(105, 105, 105);\r\n~panLabel.align = \\center;\r\n~panLabel.font = Font(\"Helvetica Neue Bold Condensed\", 13);\r\n~panLabel.stringColor = Color.white;\r\n\r\n~w.front;\r\n\r\n\r\n\r\n//PAPA\r\n\r\n~papaCentre = EZSlider(~papaLengthWind, Rect(2, 5, 300, 16), \"centr\",\r\n\t                                                 ControlSpec(0.01, 100.0, \\exp, 0.001, 100, nil),\r\n\t                                                 {|sl| ~papaCentreV = sl.value}, labelWidth:45);\r\n\r\n\r\n~bendRanger = EZRanger(~papaLengthWind, Rect(2, 26, 289, 16), \" \",\r\n\t                    ControlSpec(0.25, 4.0, \\exp, 0.001),\r\n\t                   {|sl| ~bendRangerL = sl.lo.value; ~bendRangerH = sl.hi.value}, [1,1], labelWidth:10, numberWidth:34);\r\n\r\n~bendLabel = StaticText(~papaLengthWind, Rect(294, 26, 16, 16))\r\n                          .string = \"Ƅ\";\r\n~bendLabel.background = Color.white;\r\n~bendLabel.align = \\left;\r\n~bendLabel.stringColor = Color.black;\r\n\r\n\r\n\r\n\r\n~spawnCentre = EZSlider(~spawnWind, Rect(2, 5, 300, 16), \"centr\",\r\n\t                                                 ControlSpec(0.01, 10.0, \\exp, 0.001, 1.0, nil),\r\n\t                                                 {|sl| ~spawnCentreV = sl.value}, labelWidth:45);\r\n\r\n~spawnSlope = EZSlider(~spawnWind, Rect(2, 26, 300, 16), \"shift\",\r\n\t                                             ControlSpec(-0.5, 0.5, \\lin, 0.001, 0, nil),\r\n                                                 {|sl| ~spawnSlopeV = sl.value}, labelWidth:45);\r\n\r\n~spawnDev = EZSlider(~spawnWind, Rect(2, 47, 300, 16), \"dev\",\r\n\t                                              ControlSpec(0.0, 1.0, \\lin, 0.001, 0, nil),\r\n                                                  {|sl| ~spawnDevV = sl.value}, labelWidth:45);\r\n\r\n~spawnStep = EZSlider(~spawnWind, Rect(2, 68, 300, 16), \"step\",\r\n\t                                      ControlSpec(0.0, 0.5, \\lin, 0.001, 0, nil),\r\n                                          {|sl| ~spawnStepV = sl.value}, labelWidth:45);\r\n\r\n\r\n\r\n\r\n~posStep = EZSlider(~papaPosWind, Rect(2, 5, 300, 16), \"step\",\r\n\t                                      ControlSpec(0.0, 2205, \\lin, 1, 0, nil),\r\n                                          {|sl| ~posStepV = sl.value}, labelWidth:45);\r\n\r\n~papaPosSlope = EZSlider(~papaPosWind, Rect(2, 26, 300, 16), \"shift∆\",\r\n\t                                             ControlSpec(-2205, 2205, \\lin, 1, 0, nil),\r\n                                                 {|sl| ~papaPosSlopeV = sl.value}, labelWidth:45);\r\n\r\n~spawnPosDevScaler = EZSlider(~papaPosWind, Rect(2, 47, 300, 16), \"dev∆\",\r\n\t                                              ControlSpec(-2205, 2205, \\lin, 1, 0, nil),\r\n                                                  {|sl| ~spawnPosDevScalerV = sl.value}, labelWidth:45);\r\n\r\n\r\n\r\n~rateStep = EZSlider(~papaRateWind, Rect(21, 5, 281, 16), \"step\",\r\n\t                                      ControlSpec(0.0, 0.5, \\lin, 0.001, 0.0, nil),\r\n                                          {|sl| ~rateStepV = sl.value}, labelWidth:26);\r\n\r\n~papaRateSlope = EZSlider(~papaRateWind, Rect(2, 26, 300, 16), \"shift∆\",\r\n\t                                             ControlSpec(0.0, 1.0, \\lin, 0.001, 0, nil),\r\n                                                 {|sl| ~papaRateSlopeV = sl.value}, labelWidth:45);\r\n\r\n~spawnRateDevScaler = EZSlider(~papaRateWind, Rect(2, 47, 300, 16), \"dev∆\",\r\n\t                                              ControlSpec(-0.25, 0.25, \\lin, 0.001, 0, nil),\r\n                                                  {|sl| ~spawnRateDevScalerV = sl.value}, labelWidth:45);\r\n\r\n~papaRateSlopeControl = Button(~papaRateWind, Rect(3, 5, 15, 15 ))\r\n                   .states_([[\">\", Color.black, Color.white],[\"<\", Color.black, Color.white]])\r\n\t               .action_({~papaRateSlopeSwitch = ~papaRateSlopeDir.at(~papaRateSlopeControl.value)});\r\n~papaRateSlopeControl.value = 0;\r\n~papaRateSlopeDir = [1,-1];\r\n~papaRateSlopeSwitch = ~papaRateSlopeDir.at(~papaRateSlopeControl.value);\r\n\r\n\r\n\r\n\r\n~filterStep = EZSlider(~papaFilterWind, Rect(21, 5, 281, 16), \"step\",\r\n\t                                      ControlSpec(0, 2000, \\lin, 1, 0, nil),\r\n                                          {|sl| ~filterStepV = sl.value}, labelWidth:26);\r\n\r\n~papaFilterSlope = EZSlider(~papaFilterWind, Rect(2, 26, 300, 16), \"shift∆\",\r\n\t                                             ControlSpec(0.0, 1, \\lin, 0.001, 0, nil),\r\n                                                 {|sl| ~papaFilterSlopeV = sl.value}, labelWidth:45);\r\n\r\n~spawnFilterDevScaler = EZSlider(~papaFilterWind, Rect(2, 47, 300, 16), \"dev∆\",\r\n\t                                              ControlSpec(-0.25, 0.25, \\lin, 0.001, 0, nil),\r\n                                                  {|sl| ~spawnFilterDevScalerV = sl.value}, labelWidth:45);\r\n\r\n~papaFilterSlopeControl = Button(~papaFilterWind, Rect(3, 5, 15, 15 ))\r\n                   .states_([[\">\", Color.black, Color.white],[\"<\", Color.black, Color.white]])\r\n\t               .action_({~papaFilterSlopeSwitch = ~papaFilterSlopeDir.at(~papaFilterSlopeControl.value)});\r\n~papaFilterSlopeControl.value = 0;\r\n~papaFilterSlopeDir = [1,-1];\r\n~papaFilterSlopeSwitch = ~papaFilterSlopeDir.at(~papaFilterSlopeControl.value);\r\n\r\n\r\n\r\n\r\n~durStep = EZSlider(~papaDurWind, Rect(2, 5, 300, 16), \"step\",\r\n\t                                      ControlSpec(0.0, 0.10, \\lin, 0.001, 0, nil),\r\n                                          {|sl| ~durStepV = sl.value}, labelWidth:45);\r\n\r\n~papaDurSlope = EZSlider(~papaDurWind, Rect(2, 26, 300, 16), \"shift∆\",\r\n\t                                             ControlSpec(-0.10, 0.10, \\lin, 0.001, 0, nil),\r\n                                                 {|sl| ~papaDurSlopeV = sl.value}, labelWidth:45);\r\n\r\n~spawnDurDevScaler = EZSlider(~papaDurWind, Rect(2, 47, 300, 16), \"dev∆\",\r\n\t                                              ControlSpec(-0.10, 0.10, \\lin, 0.001, 0, nil),\r\n                                                  {|sl| ~spawnDurDevScalerV = sl.value}, labelWidth:45);\r\n\r\n\r\n\r\n~densityStep = EZSlider(~papaDensityWind, Rect(2, 5, 300, 16), \"step\",\r\n\t                                      ControlSpec(0.0, 0.10, \\lin, 0.001, 0, nil),\r\n                                          {|sl| ~densityStepV = sl.value}, labelWidth:45);\r\n\r\n~papaDensitySlope = EZSlider(~papaDensityWind, Rect(2, 26, 300, 16), \"shift∆\",\r\n\t                                             ControlSpec(-0.10, 0.10, \\lin, 0.001, 0, nil),\r\n                                                 {|sl| ~papaDensitySlopeV = sl.value}, labelWidth:45);\r\n\r\n~spawnDensityDevScaler = EZSlider(~papaDensityWind, Rect(2, 47, 300, 16), \"dev∆\",\r\n\t                                              ControlSpec(-0.10, 0.10, \\lin, 0.001, 0, nil),\r\n                                                  {|sl| ~spawnDensityDevScalerV = sl.value}, labelWidth:45);\r\n\r\n\r\n~ampStep = EZSlider(~papaAmpWind, Rect(2, 5, 300, 16), \"step\",\r\n\t                                      ControlSpec(0.0, 0.50, \\lin, 0.001, 0, nil),\r\n                                          {|sl| ~ampStepV = sl.value}, labelWidth:45);\r\n\r\n~papaAmpSlope = EZSlider(~papaAmpWind, Rect(2, 26, 300, 16), \"shift∆\",\r\n\t                                             ControlSpec(-0.50, 0.50, \\lin, 0.001, 0, nil),\r\n                                                 {|sl| ~papaAmpSlopeV = sl.value}, labelWidth:45);\r\n\r\n~spawnAmpDevScaler = EZSlider(~papaAmpWind, Rect(2, 47, 300, 16), \"dev∆\",\r\n\t                                              ControlSpec(-0.50, 0.50, \\lin, 0.001, 0, nil),\r\n                                                  {|sl| ~spawnAmpDevScalerV = sl.value}, labelWidth:45);\r\n\r\n\r\n\r\n\r\n~panStep = EZSlider(~papaPanWind, Rect(2, 5, 300, 16), \"step\",\r\n\t                                      ControlSpec(0.0, 1.0, \\lin, 0.001, 0, nil),\r\n                                          {|sl| ~panStepV = sl.value}, labelWidth:45);\r\n\r\n~papaPanSlope = EZSlider(~papaPanWind, Rect(2, 26, 300, 16), \"shift∆\",\r\n\t                                             ControlSpec(-0.50, 0.50, \\lin, 0.001, 0, nil),\r\n                                                 {|sl| ~papaPanSlopeV = sl.value}, labelWidth:45);\r\n\r\n~spawnPanDevScaler = EZSlider(~papaPanWind, Rect(2, 47, 300, 16), \"dev∆\",\r\n\t                                              ControlSpec(-0.50, 0.50, \\lin, 0.001, 0, nil),\r\n                                                  {|sl| ~spawnPanDevScalerV = sl.value}, labelWidth:45);\r\n\r\n\r\n\r\n\r\n\r\n//NICOLE\r\n\r\n~nicCentre = EZSlider(~nicoleLengthWind, Rect(2, 5, 293, 16), \"centr\",\r\n\t                                                 ControlSpec(0.01, 100.0, \\exp, 0.001, 0.85, nil),\r\n\t                                                 {|sl| ~nicLengthV = sl.value}, labelWidth:38);\r\n\r\n~nicSlope = EZSlider(~nicoleLengthWind, Rect(2, 26, 293, 16), \"shift\",\r\n\t                                     ControlSpec(-1.00, 1.00, \\lin, 0.001, 0, nil),\r\n                                         {|sl| ~nicSlopeV = sl.value}, labelWidth:38);\r\n\r\n~nicDev = EZSlider(~nicoleLengthWind, Rect(2, 47, 293, 16), \"dev\",\r\n\t                                      ControlSpec(0.0, 5.0, \\lin, 0.001, 0, nil),\r\n                                          {|sl| ~nicDevV = sl.value}, labelWidth:38);\r\n\r\n~moLabel = StaticText(~w, Rect(685, 63, 125, 40))\r\n                                .string = \"moGrains\";\r\n~moLabel.background = Color.white;\r\n~moLabel.align = \\center;\r\n~moLabel.font = Font(\"Cracked\", 35);\r\n~moLabel.stringColor = Color.black; //Color.new255(105, 105, 105);\r\n\r\n\r\n~envLabel = StaticText(~soundFileBak, Rect(303, 2, 66, 14))\r\n                                .string = \"envelope\";\r\n~envLabel.background = Color.new255(190, 190, 190);\r\n~envLabel.align = \\center;\r\n~envLabel.font = Font(\"Helvetica Neue Bold Condensed\", 12);\r\n~envLabel.stringColor = Color.white;\r\n\r\n\r\n~envGab = PatternProxy(\\bufGab);\r\n~envWide = PatternProxy(\\bufWide);\r\n~envPerc = PatternProxy(\\bufPerc);\r\n~envcreP = PatternProxy(\\bufPercRev);\r\n\r\n~envChoice = [~envGab, ~envWide, ~envPerc, ~envcreP];\r\n\r\n~envShape = PopUpMenu.new(~soundFileBak, Rect(303, 18, 66, 16))\r\n\t\t.items_([\"Gab\", \"Wide\", \"Perc\", \"creP\"])\r\n\t\t.action_( { |menu| ~envPop.source = ~envChoice.at(menu.value)} );\r\n~envShape.value = 0;\r\n\r\n~envPop = PatternProxy(\\bufGab);\r\n\r\n\r\n\r\n\r\n~spawnRandom = PatternProxy(Pfunc{ |e| e.spawnRand});\r\n~spawnGaussian = PatternProxy(Pfunc{ |e| e.spawnGauss});\r\n~spawnBrownian = PatternProxy(Pfunc{ |e| e.spawnBrown});\r\n\r\n~spawnChoice = [~spawnRandom, ~spawnGaussian, ~spawnBrownian];\r\n\r\n~spawnDevShape = PopUpMenu.new(~soundFileBak, Rect(303, 47, 66, 16))\r\n\t\t.items_([\"Rand\", \"Gauss\", \"Brown\"])\r\n\t\t.action_( { |menu| ~spawnPop.source = ~spawnChoice.at(menu.value)} );\r\n~spawnDevShape.value = 0;\r\n\r\n~spawnPop = PatternProxy(Pfunc{ |e| e.spawnRand});\r\n\r\n\r\n\r\n\r\n~posCentre = EZSlider(~posWind, Rect(2, 5, 293, 16), \"centr\",\r\n\t                                   ControlSpec(0, a, \\lin, 1, a/2, nil),\r\n                                       {|sl| ~posCentreV = sl.value}, labelWidth:38);\r\n\r\n~posSlope = EZSlider(~posWind, Rect(2, 26, 293, 16), \"shift\",\r\n\t                                     ControlSpec(-4410, 4410, \\lin, 1, 0, nil),\r\n                                         {|sl| ~posSlopeV = sl.value}, labelWidth:38);\r\n\r\n~posDev = EZSlider(~posWind, Rect(2, 47, 293, 16), \"dev\",\r\n\t                                      ControlSpec(0, a, \\lin, 1, 0, nil),\r\n                                          {|sl| ~posDevV = sl.value}, labelWidth:38);\r\n\r\n~posRandom = PatternProxy(Pfunc{ |e| e.posPatternRand});\r\n~posGaussian = PatternProxy(Pfunc{ |e| e.posPatternGauss});\r\n~posBrownian = PatternProxy(Pfunc{ |e| e.posPatternBrown});\r\n\r\n~posChoice = [~posRandom, ~posGaussian, ~posBrownian];\r\n\r\n~posDevShape = PopUpMenu.new(~posWind, Rect(303, 47, 66, 16))\r\n\t\t.items_([\"Rand\", \"Gauss\", \"Brown\"])\r\n\t\t.action_( { |menu| ~posPop.source = ~posChoice.at(menu.value)} );\r\n~posDevShape.value = 0;\r\n\r\n~posPop = PatternProxy(Pfunc{ |e| e.posPatternRand});\r\n\r\n\r\n\r\n\r\n~rateCentre = EZSlider(~rateWind, Rect(2, 5, 293, 16), \"centr\",\r\n\t                                   ControlSpec(0.125, 8.0, \\exp, 0.001, 1, nil),\r\n                                       {|sl| ~rateCentreV = sl.value}, labelWidth:38);\r\n\r\n~rateSlope = EZSlider(~rateWind, Rect(2, 26, 293, 16), \"shift\",\r\n\t                                     ControlSpec(0.0, 1.0, \\lin, 0.001, 0, nil),\r\n                                         {|sl| ~rateSlopeV = sl.value}, labelWidth:38);\r\n\r\n~rateDev = EZSlider(~rateWind, Rect(2, 47, 293, 16), \"dev\",\r\n\t                                      ControlSpec(0, 1.0, \\lin, 0.001, 0, nil),\r\n                                          {|sl| ~rateDevV = sl.value}, labelWidth:38);\r\n\r\n~rateSlopeControl = Button(~rateWind, Rect(303, 27, 15, 15 ))\r\n                   .states_([[\">\", Color.black, Color.white],[\"<\", Color.black, Color.white]])\r\n\t               .action_({~rateSlopeSwitch = ~rateSlopeDir.at(~rateSlopeControl.value)});\r\n~rateSlopeControl.value = 0;\r\n~rateSlopeDir = [1,-1];\r\n~rateSlopeSwitch = ~rateSlopeDir.at(~rateSlopeControl.value);\r\n\r\n\r\n~rateDirControl = Button(~rateWind, Rect(326, 5, 44, 37 ))\r\n                   .states_([[\"⫸\", Color.black, Color.white],[\"⫷\", Color.black, Color.white]])\r\n\t               .action_({~rateDirSwitch = ~dir.at(~rateDirControl.value)});\r\n~rateDirControl.value = 0;\r\n~dir = [1,-1];\r\n~rateDirSwitch = ~dir.at(~rateDirControl.value);\r\n\r\n\r\n\r\n\r\n\r\n~rateRandom = PatternProxy(Pfunc{ |e| e.ratePatternRand});\r\n~rateGaussian = PatternProxy(Pfunc{ |e| e.ratePatternGauss});\r\n~rateBrownian = PatternProxy(Pfunc{ |e| e.ratePatternBrown});\r\n\r\n~rateChoice = [~rateRandom, ~rateGaussian, ~rateBrownian];\r\n\r\n~rateDevShape = PopUpMenu.new(~rateWind, Rect(303, 47, 67, 16))\r\n\t\t.items_([\"Rand\", \"Gauss\", \"Brown\"])\r\n\t\t.action_( { |menu| ~ratePop.source = ~rateChoice.at(menu.value)} );\r\n~rateDevShape.value = 0;\r\n\r\n~ratePop = PatternProxy(Pfunc{ |e| e.ratePatternRand});\r\n\r\n\r\n\r\n\r\n~filterCentre = EZSlider(~filterWind, Rect(2, 5, 293, 16), \"centr\",\r\n\t                                   ControlSpec(20, 20000, \\exp, 1, 20000, nil),\r\n                                       {|sl| ~filterCentreV = sl.value}, labelWidth:38);\r\n\r\n~filterSlope = EZSlider(~filterWind, Rect(2, 26, 293, 16), \"shift\",\r\n\t                                     ControlSpec(0, 1, \\lin, 0.001, 0, nil),\r\n                                         {|sl| ~ampSlopeV = sl.value}, labelWidth:38);\r\n\r\n~filterDev = EZSlider(~filterWind, Rect(2, 47, 293, 16), \"dev\",\r\n\t                                      ControlSpec(0, 8.0, \\lin, 0.001, 0, nil),\r\n                                          {|sl| ~filterDevV = sl.value}, labelWidth:38);\r\n\r\n~filterSlopeControl = Button(~filterWind, Rect(303, 26, 15, 15 ))\r\n                   .states_([[\">\", Color.black, Color.white],[\"<\", Color.black, Color.white]])\r\n\t               .action_({~filterSlopeSwitch = ~filterSlopeDir.at(~filterSlopeControl.value)});\r\n~filterSlopeControl.value = 0;\r\n~filterSlopeDir = [1,-1];\r\n~filterSlopeSwitch = ~filterSlopeDir.at(~filterSlopeControl.value);\r\n\r\n~hiPass = EZKnob(~filterWind, Rect(330, 7, 36, 36), nil,\r\n\t                                  ControlSpec(20, 22000, \\exp, 1, 20, nil),\r\n                                      {|sl| ~hiPassV = sl.value}, nil, unitWidth: 0, labelHeight: 0);\r\n\r\n~filterRandom = PatternProxy(Pfunc{ |e| e.filterPatternRand});\r\n~filterGaussian = PatternProxy(Pfunc{ |e| e.filterPatternGauss});\r\n~filterBrownian = PatternProxy(Pfunc{ |e| e.filterPatternBrown});\r\n\r\n~filterChoice = [~filterRandom, ~filterGaussian, ~filterBrownian];\r\n\r\n~filterDevShape = PopUpMenu.new(~filterWind, Rect(303, 47, 66, 16))\r\n\t\t.items_([\"Rand\", \"Gauss\", \"Brown\"])\r\n\t\t.action_( { |menu| ~filterPop.source = ~filterChoice.at(menu.value)} );\r\n~filterDevShape.value = 0;\r\n\r\n~filterPop = PatternProxy(Pfunc{ |e| e.filterPatternRand});\r\n\r\n\r\n\r\n\r\n\r\n~durCentre = EZSlider(~durWind, Rect(2, 5, 293, 16), \"centr\",\r\n\t                                   ControlSpec(0.001, 1.0, \\exp, 0.001, 0.1, nil),\r\n                                       {|sl| ~durCentreV = sl.value}, labelWidth:38);\r\n\r\n~durSlope = EZSlider(~durWind, Rect(2, 26, 293, 16), \"shift\",\r\n\t                                     ControlSpec(-0.02, 0.02, \\lin, 0.001, 0, nil),\r\n                                         {|sl| ~durSlopeV = sl.value}, labelWidth:38);\r\n\r\n~durDev = EZSlider(~durWind, Rect(2, 47, 293, 16), \"dev\",\r\n\t                                      ControlSpec(0.0, 0.10, \\lin, 0.001, 0, nil),\r\n                                          {|sl| ~durDevV = sl.value}, labelWidth:38);\r\n\r\n~durRandom = PatternProxy(Pfunc{ |e| e.durPatternRand});\r\n~durGaussian = PatternProxy(Pfunc{ |e| e.durPatternGauss});\r\n~durBrownian = PatternProxy(Pfunc{ |e| e.durPatternBrown});\r\n\r\n~durChoice = [~durRandom, ~durGaussian, ~durBrownian];\r\n\r\n~durDevShape = PopUpMenu.new(~durWind, Rect(303, 47, 66, 16))\r\n\t\t.items_([\"Rand\", \"Gauss\", \"Brown\"])\r\n\t\t.action_( { |menu| ~durPop.source = ~durChoice.at(menu.value)} );\r\n~durDevShape.value = 0;\r\n\r\n~durPop = PatternProxy(Pfunc{ |e| e.durPatternRand});\r\n\r\n\r\n\r\n\r\n~densityCentre = EZSlider(~densityWind, Rect(2, 5, 293, 16), \"centr\",\r\n\t                                   ControlSpec(0.001, 1.0, \\exp, 0.001, 0.1, nil),\r\n                                       {|sl| ~densityCentreV = sl.value}, labelWidth:38);\r\n\r\n~densitySlope = EZSlider(~densityWind, Rect(2, 26, 293, 16), \"shift\",\r\n\t                                     ControlSpec(-0.010, 0.010, \\lin, 0.001, 0, nil),\r\n                                         {|sl| ~densitySlopeV = sl.value}, labelWidth:38);\r\n\r\n~densityDev = EZSlider(~densityWind, Rect(2, 47, 293, 16), \"dev\",\r\n\t                                      ControlSpec(0.0, 0.50, \\lin, 0.001, 0, nil),\r\n                                          {|sl| ~densityDevV = sl.value}, labelWidth:38);\r\n\r\n~densityRandom = PatternProxy(Pfunc{ |e| e.densityPatternRand});\r\n~densityGaussian = PatternProxy(Pfunc{ |e| e.densityPatternGauss});\r\n~densityBrownian = PatternProxy(Pfunc{ |e| e.densityPatternBrown});\r\n\r\n~densityChoice = [~densityRandom, ~densityGaussian, ~densityBrownian];\r\n\r\n~densityDevShape = PopUpMenu.new(~densityWind, Rect(303, 47, 66, 16))\r\n\t\t.items_([\"Rand\", \"Gauss\", \"Brown\"])\r\n\t\t.action_( { |menu| ~densityPop.source = ~densityChoice.at(menu.value)} );\r\n~densityDevShape.value = 0;\r\n\r\n~densityPop = PatternProxy(Pfunc{ |e| e.densityPatternRand});\r\n\r\n\r\n\r\n~ampCentre = EZSlider(~ampWind, Rect(2, 5, 293, 16), \"centr\",\r\n\t                                   ControlSpec(0.0, 1.0, \\lin, 0.001, 0.8, nil),\r\n                                       {|sl| ~ampCentreV = sl.value}, labelWidth:38);\r\n\r\n~ampSlope = EZSlider(~ampWind, Rect(2, 26, 293, 16), \"shift\",\r\n\t                                     ControlSpec(-0.20, 0.20, \\lin, 0.001, 0, nil),\r\n                                         {|sl| ~ampSlopeV = sl.value}, labelWidth:38);\r\n\r\n~ampDev = EZSlider(~ampWind, Rect(2, 47, 293, 16), \"dev\",\r\n\t                                      ControlSpec(0.0, 1.0, \\lin, 0.001, 0, nil),\r\n                                          {|sl| ~ampDevV = sl.value}, labelWidth:38);\r\n\r\n~ampRandom = PatternProxy(Pfunc{ |e| e.ampPatternRand});\r\n~ampGaussian = PatternProxy(Pfunc{ |e| e.ampPatternGauss});\r\n~ampBrownian = PatternProxy(Pfunc{ |e| e.ampPatternBrown});\r\n\r\n~ampChoice = [~ampRandom, ~ampGaussian, ~ampBrownian];\r\n\r\n~ampDevShape = PopUpMenu.new(~ampWind, Rect(303, 47, 66, 16))\r\n\t\t.items_([\"Rand\", \"Gauss\", \"Brown\"])\r\n\t\t.action_( { |menu| ~ampPop.source = ~ampChoice.at(menu.value)} );\r\n~ampDevShape.value = 0;\r\n\r\n~ampPop = PatternProxy(Pfunc{ |e| e.ampPatternRand});\r\n\r\n\r\n\r\n\r\n~panCentre = EZSlider(~panWind, Rect(2, 5, 293, 16), \"centr\",\r\n\t                                   ControlSpec(-1.0, 1.0, \\lin, 0.001, 0, nil),\r\n                                       {|sl| ~panCentreV = sl.value}, labelWidth:38);\r\n\r\n~panSlope = EZSlider(~panWind, Rect(2, 26, 293, 16), \"shift\",\r\n\t                                     ControlSpec(-0.10, 0.10, \\lin, 0.001, 0, nil),\r\n                                         {|sl| ~panSlopeV = sl.value}, labelWidth:38);\r\n\r\n~panDev = EZSlider(~panWind, Rect(2, 47, 293, 16), \"dev\",\r\n\t                                      ControlSpec(0.0, 1.0, \\lin, 0.001, 0, nil),\r\n                                          {|sl| ~panDevV = sl.value}, labelWidth:38);\r\n\r\n~panRandom = PatternProxy(Pfunc{ |e| e.panPatternRand});\r\n~panGaussian = PatternProxy(Pfunc{ |e| e.panPatternGauss});\r\n~panBrownian = PatternProxy(Pfunc{ |e| e.panPatternBrown});\r\n\r\n~panChoice = [~panRandom, ~panGaussian, ~panBrownian];\r\n\r\n~panDevShape = PopUpMenu.new(~panWind, Rect(303, 47, 66, 16))\r\n\t\t.items_([\"Rand\", \"Gauss\", \"Brown\"])\r\n\t\t.action_( { |menu| ~panPop.source = ~panChoice.at(menu.value)} );\r\n~panDevShape.value = 0;\r\n\r\n~panPop = PatternProxy(Pfunc{ |e| e.panPatternRand});\r\n\r\n\r\n\r\n//MASTER\r\n\r\n~masterButton = Button(~w, Rect(784, 214, 20, 72));\r\n~masterButton.states_([[\"O\", Color.black, Color.white],[\"O\", Color.white, Color.yellow]]);\r\n~masterButton.action = {|view|\r\n\t                   if (view.value==1) { x=Synth(\\Cator); t=q.play} {  ~levelIndicator.value=0;x.free; t.stop} };\r\n~masterButton.value=0;\r\n\r\n~recordButton = Button(~w, Rect(784, 293, 20, 72));\r\n~recordButton.states_([[\"R\", Color.black, Color.white],[\"R\", Color.white, Color.red]]);\r\n~recordButton.action = {|view|\r\n\tif (view.value==1) {s.record} {s.stopRecording}};\r\n~recordButton.value=0;\r\n\r\n~masterVolume = SmoothSlider(~w, Rect(784, 372, 20, 151)).value_(0.4);\r\n\r\n\r\n~levelIndicator = LevelIndicator(~w, Rect(784, 530, 20, 239));\r\n\r\no = OSCFunc({arg msg;\r\n{\r\n~levelIndicator.value = msg[3].ampdb.linlin(-40, 0, 0, 1);\r\n~levelIndicator.peakLevel = msg[4].ampdb.linlin(-40, 0, 0, 1);\r\n}.defer;\r\n}, '/levels', s.addr);\r\n\r\n\r\n~levelIndicator.warning = -6.dbamp;\r\n~levelIndicator.critical = -3.dbamp;\r\n~levelIndicator.value=0;\r\n};\r\n\r\n\r\ns.sync;\r\n\r\n(\r\np = Pbind(\r\n\t   \\instrument, ~envPop,\r\n\t   \\serial, Pseries(0,1,inf),\r\n       \\bend, Pfunc{ exprand(~bendRanger.lo.value, ~bendRanger.hi.value)},\r\n\t   \\posSeries, (Pfunc{~posCentre.value} + (Pfunc{~posSlope.value} * Pkey(\\serial))).clip(0,a),\r\n\t   \\rateSeriesUp, Pfunc{~rateCentre.value} * (Pfunc{~rateSlope.value} * Pkey(\\serial) + 1),\r\n\t   \\rateSeriesDown, Pfunc{~rateCentre.value} / (Pfunc{~rateSlope.value} * Pkey(\\serial) +1),\r\n\t   \\rateSeries, Pif (Pfunc{~rateSlopeSwitch} > 0, Pkey(\\rateSeriesUp), Pkey(\\rateSeriesDown)),\r\n\t   \\filterSeriesUp, (Pfunc{~filterCentre.value} * (Pfunc{~filterSlope.value} * Pkey(\\serial) + 1)).clip(20,20000),\r\n\t   \\filterSeriesDown, (Pfunc{~filterCentre.value} / (Pfunc{~filterSlope.value} * Pkey(\\serial) +1)).clip(20,20000),\r\n\t   \\filterSeries, Pif (Pfunc{~filterSlopeSwitch} > 0, Pkey(\\filterSeriesUp), Pkey(\\filterSeriesDown)),\r\n\t   \\hiPass, Pfunc{~hiPass.value},\r\n       \\durSeries, (Pfunc{~durCentre.value} + (Pfunc{~durSlope.value} * Pkey(\\serial))).max(0.001),\r\n\t   \\densitySeries, (Pfunc{~densityCentre.value} + (Pfunc{~densitySlope.value} * Pkey(\\serial))).max(0.001),\r\n       \\ampSeries, (Pfunc{~ampCentre.value} + (Pfunc{~ampSlope.value} * Pkey(\\serial))).clip(0,1),\r\n\t   \\panSeries, (Pfunc{~panCentre.value} + (Pfunc{~panSlope.value} * Pkey(\\serial))).clip(-1,1),\r\n\t   \\vol, Pfunc{~masterVolume.value}*2.5,\r\n\r\n\r\n);\r\n\r\n\r\nq = Pspawn(\r\n     Pbind(\r\n\t\t  \\spawnSerial, Pif(Ptime(inf) < Pfunc{~papaCentre.value}, Pseries(0,1,inf)),\r\n\r\n\t\t  \\nicSeries, Pfunc{ |e| Pfunc{~nicCentre.value} + (Pfunc{~nicSlope.value} * e.spawnSerial)},\r\n\t\t  \\nicLength, Pfunc{ |e| rrand(e.nicSeries - Pfunc{~nicDev.value}, e.nicSeries + Pfunc{~nicDev.value}).max(0.01)},\r\n\r\n\r\n\r\n\t\t  \\posRand, Pfunc{ |e| rrand(Pkey(\\posSeries) - (Pfunc{~posDev.value}  +\r\n\t\t\t                                                  (Pfunc{~spawnPosDevScaler.value} * e.spawnSerial)),\r\n\t\t\t\t                     Pkey(\\posSeries) + (Pfunc{~posDev.value}  +\r\n\t\t\t\t                                              (Pfunc{~spawnPosDevScaler.value} * e.spawnSerial))).clip(0,a)},\r\n\t\t  \\posGauss, Pfunc{ |e| (Pgauss( Pkey(\\posSeries), (Pfunc{~posDev.value}  +\r\n\t\t\t                                                     (Pfunc{~spawnPosDevScaler.value} * e.spawnSerial)), inf )).clip(0,a)},\r\n\t\t  \\posBrown, Pfunc{ |e| (Pbrown( Pkey(\\posSeries) - (Pfunc{~posDev.value}  +\r\n\t\t\t                                                      (Pfunc{~spawnPosDevScaler.value} * e.spawnSerial)),\r\n\t\t\t                             Pkey(\\posSeries) + (Pfunc{~posDev.value}  +\r\n\t\t\t\t                                                  (Pfunc{~spawnPosDevScaler.value} * e.spawnSerial)),\r\n\t\t\t                             Pfunc{~posStep.value}, inf )).clip(0,a)},\r\n\r\n\t\t  \\posPatternRand, Pfunc{ |e| (e.posRand + (Pfunc{~papaPosSlope.value} * e.spawnSerial)).clip(0,a)},\r\n\t\t  \\posPatternBrown, Pfunc{ |e| (e.posBrown + (Pfunc{~papaPosSlope.value} * e.spawnSerial)).clip(0,a)},\r\n\t\t  \\posPatternGauss, Pfunc{ |e| (e.posGauss + (Pfunc{~papaPosSlope.value} * e.spawnSerial)).clip(0,a)},\r\n\t\t  \\posPattChoose, ~posPop,\r\n\r\n\r\n\r\n\r\n\t\t  \\rateRand, Pfunc{ |e| exprand(Pkey(\\rateSeries) / (Pfunc{~rateDev.value} + (Pfunc{~spawnRateDevScaler.value} * e.spawnSerial + 1)),\r\n\t\t\t                      Pkey(\\rateSeries) * (Pfunc{~rateDev.value} + (Pfunc{~spawnRateDevScaler.value} * e.spawnSerial + 1))).max(0.125)},\r\n\t\t  \\rateGauss, Pfunc{ |e| (Pgauss( Pkey(\\rateSeries), (Pfunc{~rateDev.value} +\r\n\t\t\t                                                (Pfunc{~spawnRateDevScaler.value} * e.spawnSerial)), inf)).max(0.125)},\r\n\t\t  \\rateBrown, Pfunc{ |e| (Pbrown(Pkey(\\rateSeries) / (Pfunc{~rateDev.value} + (Pfunc{~spawnRateDevScaler.value} * e.spawnSerial + 1)),\r\n\t\t\t                             Pkey(\\rateSeries) * (Pfunc{~rateDev.value} + (Pfunc{~spawnRateDevScaler.value} * e.spawnSerial + 1)),\r\n\t\t\t                             Pfunc{~rateStep.value}, inf)).max(0.125)},\r\n\t\t  \\ratePatternRandUp, Pfunc{ |e| e.rateRand * (Pfunc{~papaRateSlope.value} * e.spawnSerial +1)},\r\n\t\t  \\ratePatternRandDown, Pfunc{ |e| e.rateRand / (Pfunc{~papaRateSlope.value} * e.spawnSerial +1)},\r\n\t\t  \\ratePatternRand, Pif (Pfunc{~papaRateSlopeSwitch} > 0, Pfunc{ |e| e.ratePatternRandUp * ~rateDirSwitch},\r\n\t\t\t                                                          Pfunc{ |e| e.ratePatternRandDown * ~rateDirSwitch}),\r\n\t\t  \\ratePatternGaussUp, Pfunc{ |e| e.rateGauss * (Pfunc{~papaRateSlope.value} * e.spawnSerial +1)},\r\n\t\t  \\ratePatternGaussDown, Pfunc{ |e| e.rateGauss / (Pfunc{~papaRateSlope.value} * e.spawnSerial +1)},\r\n\t\t  \\ratePatternGauss, Pif (Pfunc{~papaRateSlopeSwitch} > 0, Pfunc{ |e| e.ratePatternGaussUp * ~rateDirSwitch},\r\n\t\t\t                                                           Pfunc{ |e| e.ratePatternGaussDown * ~rateDirSwitch}),\r\n\t\t  \\ratePatternBrownUp, Pfunc{ |e| e.rateBrown * (Pfunc{~papaRateSlope.value} * e.spawnSerial +1)},\r\n\t\t  \\ratePatternBrownDown, Pfunc{ |e| e.rateBrown / (Pfunc{~papaRateSlope.value} * e.spawnSerial +1)},\r\n\t\t  \\ratePatternBrown, Pif (Pfunc{~papaRateSlopeSwitch} > 0, Pfunc{ |e| e.ratePatternBrownUp * ~rateDirSwitch},\r\n\t\t\t                                                           Pfunc{ |e| e.ratePatternBrownDown * ~rateDirSwitch}),\r\n\t\t  \\ratePattChoose, ~ratePop,\r\n\r\n\r\n\r\n\t\t  \\filterRand, Pfunc{ |e| exprand(Pkey(\\filterSeries) / (Pfunc{~filterDev.value} + (Pfunc{~spawnFilterDevScaler.value} * e.spawnSerial + 1)),\r\n\t\t\t                                Pkey(\\filterSeries) * (Pfunc{~filterDev.value} + (Pfunc{~spawnFilterDevScaler.value} * e.spawnSerial + 1))).clip(20,20000)},\r\n\t\t  \\filterGauss, Pfunc{ |e| (Pgauss( Pkey(\\filterSeries), (Pkey(\\filterSeries)*(Pfunc{~filterDev.value} +\r\n\t\t\t                                 (Pfunc{~spawnFilterDevScaler.value} * e.spawnSerial))), inf)).clip(20,20000)},\r\n\t\t  \\filterBrown, Pfunc{ |e| (Pbrown(Pkey(\\filterSeries) / (Pfunc{~filterDev.value} + (Pfunc{~spawnFilterDevScaler.value} * e.spawnSerial + 1)),\r\n\t\t\t                                Pkey(\\filterSeries) * (Pfunc{~filterDev.value} + (Pfunc{~spawnFilterDevScaler.value} * e.spawnSerial + 1)),\r\n\t\t\t                                Pfunc{~filterStep.value}, inf)).clip(20,20000)},\r\n\t\t  \\filterPatternRandUp, Pfunc{ |e| (e.filterRand * (Pfunc{~papaFilterSlope.value} * e.spawnSerial +1)).clip(20,20000)},\r\n\t\t  \\filterPatternRandDown, Pfunc{ |e| (e.filterRand / (Pfunc{~papaFilterSlope.value} * e.spawnSerial +1)).clip(20,20000)},\r\n\t\t  \\filterPatternRand, Pif (Pfunc{~papaFilterSlopeSwitch} > 0, Pfunc{ |e| e.filterPatternRandUp},\r\n\t\t\t                                                          Pfunc{ |e| e.filterPatternRandDown}),\r\n\t\t  \\filterPatternGaussUp, Pfunc{ |e| (e.filterGauss * (Pfunc{~papaFilterSlope.value} * e.spawnSerial +1)).clip(20,20000)},\r\n\t\t  \\filterPatternGaussDown, Pfunc{ |e| (e.filterGauss / (Pfunc{~papaFilterSlope.value} * e.spawnSerial +1)).clip(20,20000)},\r\n\t\t  \\filterPatternGauss, Pif (Pfunc{~papaFilterSlopeSwitch} > 0, Pfunc{ |e| e.filterPatternGaussUp},\r\n\t\t \t                                                           Pfunc{ |e| e.filterPatternGaussDown}),\r\n\t\t  \\filterPatternBrownUp, Pfunc{ |e| (e.filterBrown * (Pfunc{~papaFilterSlope.value} * e.spawnSerial +1)).clip(20,20000)},\r\n\t\t  \\filterPatternBrownDown, Pfunc{ |e| (e.filterBrown / (Pfunc{~papaFilterSlope.value} * e.spawnSerial +1)).clip(20,20000)},\r\n\t\t  \\filterPatternBrown, Pif (Pfunc{~papaFilterSlopeSwitch} > 0, Pfunc{ |e| e.filterPatternBrownUp},\r\n\t\t\t                                                           Pfunc{ |e| e.filterPatternBrownDown}),\r\n\t\t  \\filterPattChoose, ~filterPop,\r\n\r\n\r\n\r\n          \\durRand, Pfunc{ |e| rrand(Pkey(\\durSeries) - (Pfunc{~durDev.value}  +\r\n\t\t\t                                                  (Pfunc{~spawnDurDevScaler.value} * e.spawnSerial)),\r\n\t\t\t\t                     Pkey(\\durSeries) + (Pfunc{~durDev.value}  +\r\n\t\t\t\t                                              (Pfunc{~spawnDurDevScaler.value} * e.spawnSerial))).max(0.001)},\r\n\t\t  \\durGauss, Pfunc{ |e| (Pgauss( Pkey(\\durSeries), (Pfunc{~durDev.value}  +\r\n\t\t\t                                                     (Pfunc{~spawnDurDevScaler.value} * e.spawnSerial)), inf )).max(0.001)},\r\n\t\t  \\durBrown, Pfunc{ |e| (Pbrown( Pkey(\\durSeries) - (Pfunc{~durDev.value}  +\r\n\t\t\t                                                      (Pfunc{~spawnDurDevScaler.value} * e.spawnSerial)),\r\n\t\t\t                             Pkey(\\durSeries) + (Pfunc{~durDev.value}  +\r\n\t\t\t\t                                                  (Pfunc{~spawnDurDevScaler.value} * e.spawnSerial)),\r\n\t\t\t                             Pfunc{~durStep.value}, inf )).max(0.001)},\r\n\r\n\t\t  \\durPatternRand, Pfunc{ |e| (e.durRand + (Pfunc{~papaDurSlope.value} * e.spawnSerial)).max(0.001)},\r\n\t\t  \\durPatternBrown, Pfunc{ |e| (e.durBrown + (Pfunc{~papaDurSlope.value} * e.spawnSerial)).max(0.001)},\r\n\t\t  \\durPatternGauss, Pfunc{ |e| (e.durGauss + (Pfunc{~papaDurSlope.value} * e.spawnSerial)).max(0.001)},\r\n\t\t  \\durPattChoose, ~durPop,\r\n\r\n\r\n\r\n\t\t  \\densityRand, Pfunc{ |e| rrand(Pkey(\\densitySeries) - (Pfunc{~densityDev.value}  +\r\n\t\t\t                                                  (Pfunc{~spawnDensityDevScaler.value} * e.spawnSerial)),\r\n\t\t\t\t                     Pkey(\\densitySeries) + (Pfunc{~densityDev.value}  +\r\n\t\t\t\t                                              (Pfunc{~spawnDensityDevScaler.value} * e.spawnSerial))).max(0.001)},\r\n\t\t  \\densityGauss, Pfunc{ |e| (Pgauss( Pkey(\\densitySeries), (Pfunc{~densityDev.value}  +\r\n\t\t\t                                                     (Pfunc{~spawnDensityDevScaler.value} * e.spawnSerial)), inf )).max(0.001)},\r\n\t\t  \\densityBrown, Pfunc{ |e| (Pbrown( Pkey(\\densitySeries) - (Pfunc{~densityDev.value}  +\r\n\t\t\t                                                      (Pfunc{~spawnDensityDevScaler.value} * e.spawnSerial)),\r\n\t\t\t                             Pkey(\\densitySeries) + (Pfunc{~densityDev.value}  +\r\n\t\t\t\t                                                  (Pfunc{~spawnDensityDevScaler.value} * e.spawnSerial)),\r\n\t\t\t                             Pfunc{~densityStep.value}, inf )).max(0.001)},\r\n\r\n\t\t  \\densityPatternRand, Pfunc{ |e| (e.densityRand + (Pfunc{~papaDensitySlope.value} * e.spawnSerial)).max(0.001)},\r\n\t\t  \\densityPatternBrown, Pfunc{ |e| (e.densityBrown + (Pfunc{~papaDensitySlope.value} * e.spawnSerial)).max(0.001)},\r\n\t\t  \\densityPatternGauss, Pfunc{ |e| (e.densityGauss + (Pfunc{~papaDensitySlope.value} * e.spawnSerial)).max(0.001)},\r\n\t\t  \\densityPattChoose, ~densityPop,\r\n\r\n\r\n\r\n          \\ampRand, Pfunc{ |e| rrand(Pkey(\\ampSeries) - (Pfunc{~ampDev.value}  +\r\n\t\t\t                                                  (Pfunc{~spawnAmpDevScaler.value} * e.spawnSerial)),\r\n\t\t\t\t                     Pkey(\\ampSeries) + (Pfunc{~ampDev.value}  +\r\n\t\t\t\t                                              (Pfunc{~spawnAmpDevScaler.value} * e.spawnSerial))).clip(0,1)},\r\n\t\t  \\ampGauss, Pfunc{ |e| (Pgauss( Pkey(\\ampSeries), (Pfunc{~ampDev.value}  +\r\n\t\t\t                                                     (Pfunc{~spawnAmpDevScaler.value} * e.spawnSerial)), inf )).clip(0,1)},\r\n\t\t  \\ampBrown, Pfunc{ |e| (Pbrown( Pkey(\\ampSeries) - (Pfunc{~ampDev.value}  +\r\n\t\t\t                                                      (Pfunc{~spawnAmpDevScaler.value} * e.spawnSerial)),\r\n\t\t\t                             Pkey(\\ampSeries) + (Pfunc{~ampDev.value}  +\r\n\t\t\t\t                                                  (Pfunc{~spawnAmpDevScaler.value} * e.spawnSerial)),\r\n\t\t\t                             Pfunc{~ampStep.value}, inf )).clip(0,1)},\r\n\r\n\t\t  \\ampPatternRand, Pfunc{ |e| (e.ampRand + (Pfunc{~papaAmpSlope.value} * e.spawnSerial)).clip(0,1)},\r\n\t\t  \\ampPatternBrown, Pfunc{ |e| (e.ampBrown + (Pfunc{~papaAmpSlope.value} * e.spawnSerial)).clip(0,1)},\r\n\t\t  \\ampPatternGauss, Pfunc{ |e| (e.ampGauss + (Pfunc{~papaAmpSlope.value} * e.spawnSerial)).clip(0,1)},\r\n\t\t  \\ampPattChoose, ~ampPop,\r\n\r\n\r\n\r\n\r\n\t      \\panRand, Pfunc{ |e| rrand(Pkey(\\panSeries) - (Pfunc{~panDev.value}  +\r\n\t\t\t                                                  (Pfunc{~spawnPanDevScaler.value} * e.spawnSerial)),\r\n\t\t\t\t                     Pkey(\\panSeries) + (Pfunc{~panDev.value}  +\r\n\t\t\t\t                                              (Pfunc{~spawnPanDevScaler.value} * e.spawnSerial))).clip(-1,1)},\r\n\t\t  \\panGauss, Pfunc{ |e| (Pgauss( Pkey(\\panSeries), (Pfunc{~panDev.value}  +\r\n\t\t\t                                                     (Pfunc{~spawnPanDevScaler.value} * e.spawnSerial)), inf )).clip(-1,1)},\r\n\t\t  \\panBrown, Pfunc{ |e| (Pbrown( Pkey(\\panSeries) - (Pfunc{~panDev.value}  +\r\n\t\t\t                                                      (Pfunc{~spawnPanDevScaler.value} * e.spawnSerial)),\r\n\t\t\t                             Pkey(\\panSeries) + (Pfunc{~panDev.value}  +\r\n\t\t\t\t                                                  (Pfunc{~spawnPanDevScaler.value} * e.spawnSerial)),\r\n\t\t\t                             Pfunc{~panStep.value}, inf )).clip(-1,1)},\r\n\r\n\t\t  \\panPatternRand, Pfunc{ |e| (e.panRand + (Pfunc{~papaPanSlope.value} * e.spawnSerial)).clip(-1,1)},\r\n\t\t  \\panPatternBrown, Pfunc{ |e| (e.panBrown + (Pfunc{~papaPanSlope.value} * e.spawnSerial)).clip(-1,1)},\r\n\t\t  \\panPatternGauss, Pfunc{ |e| (e.panGauss + (Pfunc{~papaPanSlope.value} * e.spawnSerial)).clip(-1,1)},\r\n\t\t  \\panPattChoose, ~panPop,\r\n\r\n\t\t  \\pattern, Pfunc { |e| Pbindf(p,\\serialx, Pif(Ptime(inf) < e.nicLength, Pseries(0,1,inf)),\r\n\t\t\t                             \\pos, e.posPattChoose,\r\n\t\t\t                             \\rate, e.ratePattChoose,\r\n\t\t\t                             \\filter, e.filterPattChoose,\r\n\t\t\t                             \\sus, e.durPattChoose,\r\n\t\t\t                             \\delta, e.densityPattChoose,\r\n\t\t\t                             \\amp, e.ampPattChoose,\r\n\t\t\t                             \\pan, e.panPattChoose\r\n\r\n\r\n\r\n\r\n\r\n\r\n\t\t)},\r\n\t\t \\spawnSeries, Pfunc{~spawnCentre.value} + (Pfunc{~spawnSlope.value} * Pkey(\\spawnSerial)),\r\n\t\t \\spawnRand, (Pwhite(Pkey(\\spawnSeries) - Pfunc{~spawnDev.value}, Pkey(\\spawnSeries) + Pfunc{~spawnDev.value}, inf)).max(0.01),\r\n\t\t \\spawnGauss, (Pgauss(Pkey(\\spawnSeries), Pfunc{~spawnDev.value}, inf)).max(0.01),\r\n\t\t \\spawnBrown, (Pbrown(Pkey(\\spawnSeries) - Pfunc{~spawnDev.value}, Pkey(\\spawnSeries) + Pfunc{~spawnDev.value},\r\n\t\t\t                             Pfunc{~spawnStep.value}, inf)).max(0.01),\r\n\t\t \\delta, ~spawnPop,\r\n\t     \\method, \\par)\r\n\t     );\r\n);\r\n})",
   "id" : "1-4Sw",
   "is_private" : null
}
