{
   "author" : "david_morgan",
   "name" : "Shift register patch",
   "description" : "",
   "ancestor_list" : [],
   "labels" : [],
   "is_private" : null,
   "id" : "1-590",
   "code" : "/*\r\nShift register code adapted from here:\r\n\r\n\"http://new-supercollider-mailing-lists-forums-use-these.2681727.n2.nabble.com/serial-in-parallell-out-shift-register-ugen-td6331387.html\"\r\n*/\r\n\r\n(\r\n~shift_register = {arg length = 5, trig, in;\r\n\t\r\n\tvar buf = LocalBuf(length);\r\n\tvar count = PulseCount.kr(trig);\r\n\t\t\r\n\tDemand.kr(trig, 0, Dbufwr(in, buf, count));\r\n\tDemand.kr(trig, 0, Dbufrd(buf, count + (1..length))).reverse;\r\n};\r\n\r\nNdef(\\n1, {\r\n\r\n\tvar amp = 0.1;\r\n\tvar pulse = Impulse.kr(1/16);\r\n\tvar rate = TChoose.kr(pulse, [3,5,10]);\r\n\tvar trans = TChoose.kr(pulse, [0,2,-2,7,-5]);\r\n\r\n\t//var trig = Impulse.kr([3,5]/2);\r\n\tvar trig = Trig1.kr(CuspL.ar(rate * 3), 0.001);\r\n\tvar octave = Demand.kr(PulseDivider.kr(trig, 4), 0, Drand([12,-12], inf));\r\n\tvar note = Demand.kr(trig, 0, Dseq([42,46,51,54,59,63,66].scramble + trans, inf) + octave);\r\n\tvar chord = ~shift_register.(5, trig, note);\r\n\r\n\tvar sig = PMOsc.ar(\r\n\t\tVibrato.ar(K2A.ar(chord.midicps)),\r\n\t\tchord.midicps * LFPulse.kr(1/8).range(1.01, 2.01),\r\n\t\tEnv([3,3,0],[0, 0.2], -4).kr(gate:trig)\r\n\t);\r\n\tsig = sig * AmpCompA.kr(chord.midicps) * amp;\r\n\r\n\tsig = sig.flatten.sum;\r\n\tsig = XFade2.ar(sig!2, GVerb.ar(BPF.ar(sig, 90.midicps), roomsize:50, revtime:8, drylevel:0), 0.2);\r\n\tsig;\r\n\r\n}).play(fadeTime:4);\r\n)"
}
