{
   "labels" : [
      "rhythm",
      "risset",
      "shephard",
      "accelerando",
      "decelerando",
      "illusion"
   ],
   "code" : "// See http://c4dm.eecs.qmul.ac.uk/papers/2011/Stowell2011icmc.pdf\r\n\r\n// use any shortish 4/4 drum loop\r\nb = Buffer.read(s, Platform.resourceDir +/+ \"sounds/break2.aiff\");\r\nb.free;\r\n\r\n(\r\nSynthDef(\\risset, {\r\n    |out = 0, buf, megabardur = 3.0, bufdur = 3.0, level = 0, bandwidth = 1, centerrate = 1, dir = 1|\r\n    var t, rate, snd, power;\r\n    t = Sweep.kr * dir;\r\n    rate = bufdur * 2.log / megabardur * pow(2, t / megabardur + level);\r\n    power = (pi * bandwidth * 0.5 * log2(rate / centerrate)).clip2(pi).cos + 1 / 2;\r\n    snd = PlayBuf.ar(1, b, BufRateScale.kr(b) * rate, loop: 1) * power;\r\n    EnvGen.kr(Env([0, 0], [megabardur]), doneAction: 2);\r\n    Out.ar(out, Pan2.ar(snd));\r\n}).add;\r\n)\r\n\r\n(\r\n// amount of time it takes for the audio to speed up or slow down 2x\r\n// the rhythm repeats seamlessly every megabar\r\nvar megabardur = 20.0;\r\nPbind(\r\n    \\instrument, \\risset,\r\n    \\buf, b,\r\n    \\megabardur, megabardur,\r\n    \\dur, megabardur,\r\n    \\bufdur, b.duration,\r\n    \\level, (0..5),\r\n    \\bandwidth, 0.8, // adjust this if the illusion isn't very convincing\r\n    \\centerrate, 1.0,\r\n    \\dir, 1 // 1 for accel, -1 for decel\r\n).play;\r\n)",
   "is_private" : null,
   "id" : "1-511",
   "name" : "Risset rhythm",
   "author" : "snappizz",
   "ancestor_list" : [],
   "description" : "buffer playback with eternal accelerando rhythm"
}
