{
   "labels" : [
      "graphic",
      "animation",
      "3d"
   ],
   "code" : "//--redFrik 2013\r\n//req. Canvas3D quark\r\n//use mouse to rotate canvas\r\n//add your own sounds to x, y, z (maybe with InFeedback.ar)\r\n(\r\n//--settings\r\nvar width= 640, height= 480;\r\nvar fps= 60;\r\nvar buffersize= 1024;\r\nvar scale= 250;\r\nvar perspective= 0.3;\r\nvar distance= 2;\r\n\r\n//--\r\nvar win= Window(\"3d soundwave canvas\", Rect(128, 64, width, height), false).front;\r\nvar can= Canvas3D(win, Rect(0, 0, width, height)).scale_(scale).perspective_(perspective).distance_(distance);\r\nvar itemCube= Canvas3DItem.cube;\r\nvar itemWave= Canvas3DItem.new;\r\nvar path= [];\r\nvar buffer;\r\ncan.add(itemCube);\r\ncan.add(itemWave);\r\ns.waitForBoot{\r\n\tbuffer= Buffer.alloc(s, buffersize, 3);\r\n\ts.sync;\r\n\t{\r\n\t\tvar x= SinOsc.ar(42);//sound x\r\n\t\tvar y= SinOsc.ar(83);//sound y\r\n\t\tvar z= SinOsc.ar(164);//sound z\r\n\t\tRecordBuf.ar([x, y, z], buffer);\r\n\t\tSilent.ar;\r\n\t}.play;\r\n\ts.sync;\r\n\tcan.animate(fps, {|frame|\r\n\t\tbuffer.getn(0, buffersize-1*3, {|data| path= data.clump(3)});\r\n\t\titemWave.paths= [path];\r\n\t});\r\n\tcan.mouseMoveAction= {|v, x, y|\r\n\t\tcan.transforms= [\r\n\t\t\tCanvas3D.mRotateY(x/scale.neg%2pi),\r\n\t\t\tCanvas3D.mRotateX(y/scale%2pi)\r\n\t\t];\r\n\t};\r\n\tCmdPeriod.doOnce({win.close; buffer.free});\r\n};\r\n)",
   "id" : "1-4TV",
   "is_private" : null,
   "name" : "Canvas3D used to plot realtime sound",
   "author" : "Fredrik Olofsson",
   "description" : "",
   "ancestor_list" : []
}
