{
   "labels" : [
      "squiggle",
      "record",
      "play"
   ],
   "code" : "// part one: record squiggle\r\n(\r\n// start time\r\nvar startTime = thisThread.seconds ;\r\n~allPoints = [] ;\r\n~diffPoints = [] ;\r\nw = Window.new.front;\r\n\r\nq = UserView.new(w,w.view.bounds);\r\n\r\nq.mouseDownAction_({\r\n\t| view, x, y, modifiers, buttonNumber, clickCount |\r\n\t~allPoints = [];\r\n});\r\nq.mouseMoveAction_({\r\n\t| view, x, y, modifiers, buttonNumber, clickCount |\r\n\t~allPoints = ~allPoints.add([x, y, thisThread.seconds-startTime].postln );\r\n});\r\nq.animate_(true);\r\nq.drawFunc_({\r\n\t~allPoints.do({\r\n\t\t|pos, index|\r\n\t\tif ((index > 0), {\r\n\t\t\tPen.fillColor = \"000000\";\r\n\t\t\tPen.line( Point(~allPoints[index-1][0], ~allPoints[index-1][1]), Point(pos[0], pos[1]));\r\n\t\t\tPen.stroke;\r\n\t\t});\r\n\t});\r\n});\r\n)\r\n\r\n// part two: perform squiggle\r\n(\r\ns.waitForBoot({\r\n\r\nSynthDef(\\doSomething,  {\r\n\t\t| out=0, freq=440, xval, yval |\r\n\t\tvar sig = 0.05*(VarSaw.ar(freq*yval.linlin(0,350,2,1), width:xval.linlin(0,350,0.2,0.9)));\r\n\t\tvar env = EnvGen.ar(Env.perc(0.1),doneAction:2);\r\n\t\tsig = env*sig;\r\n\t\tOut.ar(out, sig!2);\r\n}).add;\r\n\r\ns.sync;\r\n\r\nPdef(\\playRecorded,\r\n\tPbind(\\instrument, \\doSomething,\r\n\t\t  \\firstOrder, Pseq(~allPoints, 1),\r\n\t\t  \\secondOrder, Pseq([[0,0,0], Pseq(~allPoints.differentiate.shift(-1), 1)], 1),\r\n\t\t  \\degree, 5,\r\n\t\t  \\xval,  Pfunc({ | ev | ev[\\firstOrder][0]; }), // xval somewhere between 0 and 350\r\n\t\t  \\yval,  Pfunc({ | ev | ev[\\firstOrder][1]; }), // yval somewhere between 0 and 350\r\n\t\t  \\dur,  Pfunc({ | ev | ev[\\secondOrder][2]; })\r\n));\r\nPdef(\\playRecorded).play;\r\n\r\n});\r\n\r\n)",
   "is_private" : null,
   "id" : "1-57A",
   "name" : "Scribble Squiggle",
   "author" : "56228375",
   "ancestor_list" : [],
   "description" : "Alternative way of squiggling: instead of modeling the squiggle with math formulas you can also just draw it by mouse, record it and then play it back (after optionally transforming it) to drive some synths."
}
