{
   "ancestor_list" : [],
   "description" : "Early experimentation with patterns. Attempt at recreating Piano Phase by Steve Reich with random part lengths.",
   "name" : "Piano phase",
   "author" : "jpdrecourt",
   "id" : "1-5d7",
   "is_private" : null,
   "code" : "(\r\nSynthDef(\\mdapianoL, { |out=0, freq=440, gate=1, pan = 0, vel = 100, delaySigma = 0.01, release = 0.1, releaseSigma = 0.03, tune = 0.5|\r\n\tvar son = MdaPiano.ar(freq, gate, vel,\r\n\t\trelease: NRand(-3*releaseSigma, 3*releaseSigma, 50) + release,\r\n\t\tstereo: 0.1,\r\n\t\ttune: tune,\r\n\t\tsustain: 0);\r\n\t// son = Rotate2.ar(Select.ar(0, son), Select.ar(1, son), -0.4);\r\n\tson = BAllPass.ar(son, 1500, 10);\r\n\tson = DelayC.ar(son, delaySigma*6, NRand(0, delaySigma*6, 50));\r\n\tson = Balance2.ar(Select.ar(0, son), Select.ar(1, son), pan);\r\n\tFreeSelf.kr(DetectSilence.ar(son.abs.sum + Impulse.ar(0)));\r\n\tOut.ar(out, son * 0.5);\r\n}).add;\r\n\r\nSynthDef(\\mdapianoR, { |out=0, freq=440, gate=1, pan = 0, vel = 100, delaySigma = 0.01, release = 0.1, releaseSigma = 0.03, tune = 0.5|\r\n\tvar son = MdaPiano.ar(freq, gate, vel,\r\n\t\trelease: NRand(-3*releaseSigma, 3*releaseSigma, 50) + release,\r\n\t\tstereo: 0.11,\r\n\t\ttune: tune,\r\n\t\tsustain: 0);\r\n\t// son = Rotate2.ar(Select.ar(0, son), Select.ar(1, son), -1);\r\n\tson = DelayC.ar(son, delaySigma*6, NRand(0, delaySigma*6, 50));\r\n\tson = Balance2.ar(Select.ar(0, son), Select.ar(1, son), pan);\r\n\tFreeSelf.kr(DetectSilence.ar(son.abs.sum + Impulse.ar(0)));\r\n\tOut.ar(out, son * 0.5);\r\n}).add;\r\n\r\nSynthDef(\\reverb, {|out = 0, mix = 0.33, room = 0.5, damp = 0.5, predelay = 0.02|\r\n\tvar in = In.ar(out, 2);\r\n\tin = FreeVerb2.ar(Select.ar(0, in), Select.ar(1, in), mix, room, damp);\r\n\tin = DelayC.ar(in, 0.1, predelay);\r\n\tReplaceOut.ar(out, in);\r\n}).add;\r\n\r\nSynthDef(\\lpf, {|out = 0, freq = 1200|\r\n\tvar in = In.ar(out, 2);\r\n\tReplaceOut.ar(out, LPF.ar(in, freq));\r\n}).add;\r\n\r\nSynthDef(\\delay, {|out = 0, wet = 0.5|\r\n\tvar in = In.ar(out, 2);\r\n\tvar delayed = in;\r\n\t4.do({ delayed = AllpassN.ar(delayed, 0.14, [0.13888.rand, 0.13888.rand], 1) });\r\n\tReplaceOut.ar(out, ((1 - wet)*in) + (wet*delayed));\r\n}).add;\r\n)\r\n\r\n\r\n\r\n(\r\nvar midiPart1, velPart1, sPart1;\r\nvar midiPart2L, midiPart2R, velPart2, sPart2;\r\nvar midiPart3, velPart3, sPart3;\r\nvar velPattern = [\r\n\tPwhite(90, 100,1), // LH\r\n\tPwhite(85, 95, 1)]; // RH\r\nvar pianoL, pianoR;\r\nvar pan = 0.4;\r\nvar verbMix, verbRoom, verbDamp;\r\n// Create a non-linear pattern series from almost zero to almost 1.\r\nvar pCrescendo = { |steps = 100, isDec = false|\r\n\tvar low = -15, high = 15;\r\n\tisDec.if(\r\n\t\t{Pseries(high, (low - high)/(steps - 1), steps).distort + 1 * 0.5;},\r\n\t\t{Pseries(low, (high - low)/(steps - 1), steps).distort + 1 * 0.5;}\r\n\t);\r\n};\r\n// Create a pattern for a more realistic accelerando of one beat of the number of bars\r\nvar pAccel = {|nBars = 10, beats = 6|\r\n\tvar bar = Array.fill(beats, 1);\r\n\tvar nBarsAccel = nBars.div(2);\r\n\tvar accelDur = 1 - (1 / nBarsAccel / beats);\r\n\tvar patternBars = Array.fill(nBarsAccel, Pseq(bar*accelDur)) ++ Array.fill(nBars - nBarsAccel, Pseq(bar));\r\n\tPshuf(patternBars);\r\n};\r\n~theEnd = false;\r\n~nBars = 0; // Current part length\r\n~phrase = 1; // Phrase number\r\n// Part 1 - 1 to 15\r\nmidiPart1 = [64, 66, 71, 73, 74, 66, 64, 73, 71, 66, 74, 73];\r\nsPart1 = midiPart1.size;\r\nvelPart1 = Pwhite(0.98, 1)*Pseq(velPattern, sPart1 / 2);\r\n// Part 2 - 16 to 26\r\nmidiPart2L = [64, 66, 71, 73, 74, 66, 71, 73];\r\nmidiPart2R = [64, 76, 69, 71, 74, 76, 69, 71];\r\nsPart2 = midiPart2L.size;\r\nvelPart2 = Pseq(velPattern, sPart2 / 2);\r\n// Part 3 - 26a to 32\r\nmidiPart3 = [69, 71, 74, 76];\r\nsPart3 = midiPart3.size;\r\nvelPart3 = Pseq(velPattern, sPart3 / 2);\r\nTempoClock.default.tempo = 72*6/60;\r\n// Left piano\r\n// Because of the accelerandos, left piano effectively plays one bar less per part\r\npianoL = Pbind(\r\n\t\\instrument, \\mdapianoL,\r\n\t\\midinote, Pseq([\r\n\t\t// 1 - 15\r\n\t\tPseq([\r\n\t\t\tPlazy({\r\n\t\t\t\tPseq(midiPart1, ~nBars);\r\n\t\t\t})\r\n\t\t], 26),\r\n\t\tPlazy({\r\n\t\t\tPseq(midiPart1, ~nBars - 1);\r\n\t\t}),\r\n\t\t// 16 - 24\r\n\t\tPseq([\r\n\t\t\tPlazy({\r\n\t\t\t\tPseq(midiPart2L, ~nBars);\r\n\t\t\t})\r\n\t\t], 16),\r\n\t\tPlazy({\r\n\t\t\tPseq(midiPart2L, (~nBars - 1));\r\n\t\t}),\r\n\t\t// 25 and 26\r\n\t\tPseq([\r\n\t\t\tPlazy({\r\n\t\t\t\tPseq(midiPart2L, ~nBars);\r\n\t\t\t})\r\n\t\t], 2),\r\n\t\t// 26a\r\n\t\tPseq([Rest(1)], 2),\r\n\t\t// 27 to 31\r\n\t\tPseq([\r\n\t\t\tPlazy({\r\n\t\t\t\tPseq(midiPart3, ~nBars);\r\n\t\t\t})\r\n\t\t], 9),\r\n\t\t// 32\r\n\t\t// First bar to decide how long\r\n\t\tPseq(midiPart3, 1),\r\n\t\tPlazy({\r\n\t\t\tPseq(midiPart3, ~nBars -1)\r\n\t\t}),\r\n\t\t// Sending the nod from midi instead of vel\r\n\t\t// because the nod has to be sent at the last note (and velPart3 is a pattern)\r\n\t\tPseq(midiPart3[0..(sPart3 - 2)]),\r\n\t\tPlazy({\r\n\t\t\t~theEnd = true;\r\n\t\t\t\"*** Noding for end ***\".postln;\r\n\t\t\tPseq([midiPart3[sPart3 - 1]]);\r\n\t\t}),\r\n\t\tPseq(midiPart3, 4),\r\n\t\t// And wait\r\n\t\tRest(10)\r\n\t]),\r\n\t\\dur, 1,\r\n\t\\vel, Pseq([\r\n\t\t// 1 - 15\r\n\t\tPseq([\r\n\t\t\tPlazy({\r\n\t\t\t\tPseq([velPart1], ~nBars);\r\n\t\t\t})\r\n\t\t], 26),\r\n\t\tPlazy({\r\n\t\t\tPseq([velPart1], (~nBars - 1));\r\n\t\t}),\r\n\t\t// 16 to 24\r\n\t\tPseq([\r\n\t\t\tPlazy({\r\n\t\t\t\tPseq([velPart2], ~nBars);\r\n\t\t\t})\r\n\t\t], 16),\r\n\t\tPlazy({\r\n\t\t\tPseq([velPart2], (~nBars - 1));\r\n\t\t}),\r\n\t\t// 25\r\n\t\tPlazy({\r\n\t\t\tPseq([velPart2], ~nBars) * pCrescendo.value(sPart2 * ~nBars, true);\r\n\t\t}),\r\n\t\t// 26\r\n\t\tPlazy({\r\n\t\t\tPseq([velPart2]*0, ~nBars);\r\n\t\t}),\r\n\t\t// 26a\r\n\t\tPseq([0], 2),\r\n\t\t// 27\r\n\t\tPlazy({\r\n\t\t\tPseq([0], sPart3*(~nBars - 1));\r\n\t\t}),\r\n\t\t// Left piano chooses crescendo in phrase 28\r\n\t\tPlazy({\r\n\t\t\t~nBars = (24..48).choose;\r\n\t\t\tPseq([0], sPart3);\r\n\t\t}),\r\n\t\t// 28.1\r\n\t\tPlazy({\r\n\t\t\tPseq([velPart3], ~nBars)*pCrescendo.value(sPart3 * ~nBars);\r\n\t\t}),\r\n\t\t// 28.2 to 31\r\n\t\tPseq([\r\n\t\t\tPlazy({\r\n\t\t\t\tPseq([velPart3], ~nBars);\r\n\t\t\t})\r\n\t\t], 7),\r\n\t\t// 32\r\n\t\t// One bar to choose\r\n\t\tPlazy({\r\n\t\t\t// Leaving two bars at beginning and 4 bars for ending at the end\r\n\t\t\t~nBars = (18..42).choose;\r\n\t\t\tPseq([velPart3], 1);\r\n\t\t}),\r\n\t\tPlazy({\r\n\t\t\tPseq([velPart3], ~nBars + 4);\r\n\t\t}),\r\n\t\t// And wait\r\n\t\tRest(10)\r\n\t]),\r\n\t\\legato, 0.7,\r\n\t\\release, 0.15,\r\n\t\\releaseSigma, 0.02,\r\n\t\\tune, 0.49,\r\n\t\\pan, (0 - pan)\r\n);\r\n// Right piano\r\npianoR = Pbind(\r\n\t\\instrument, \\mdapianoR,\r\n\t\\legato, 0.7,\r\n\t\\release, 0.10,\r\n\t\\releaseSigma, 0.03,\r\n\t\\pan, (pan),\r\n\t\\vel, Pseq([\r\n\t\t// 1\r\n\t\tPlazy({\r\n\t\t\t~nBars = (4..8).choose;\r\n\t\t\t\"*** Part 1 ***\".postln;\r\n\t\t\t(\"\" ++ ~phrase ++ \": \" ++ ~nBars).postln;\r\n\t\t\t~phrase = ~phrase + 1;\r\n\t\tPseq([velPart1]*0, ~nBars);}),\r\n\t\t// 2.1\r\n\t\tPlazy({\r\n\t\t\t~nBars = (12..18).choose;\r\n\t\t\t(\"\" ++ ~phrase ++ \".1: \" ++ ~nBars).postln;\r\n\t\t\tPseq([velPart1], ~nBars)*pCrescendo.value(sPart1 * ~nBars);\r\n\t\t}),\r\n\t\t// 2.2\r\n\t\tPlazy({\r\n\t\t\t~nBars = (4..16).choose;\r\n\t\t\t(\"\" ++ ~phrase ++ \".2: \" ++ ~nBars).postln;\r\n\t\t\t~phrase = ~phrase + 1;\r\n\t\t\tPseq([velPart1], ~nBars);\r\n\t\t}),\r\n\t\t// 3 to 8\r\n\t\tPseq([\r\n\t\t\tPlazy({\r\n\t\t\t\t~nBars = (16..24).choose;\r\n\t\t\t\t(\"\" ++ ~phrase ++ \".1: \" ++ ~nBars).postln;\r\n\t\t\t\tPseq([velPart1], ~nBars);\r\n\t\t\t}),\r\n\t\t\tPlazy({\r\n\t\t\t\t~nBars = (4..16).choose;\r\n\t\t\t\t(\"\" ++ ~phrase ++ \".2: \" ++ ~nBars).postln;\r\n\t\t\t\t~phrase = ~phrase + 1;\r\n\t\t\t\tPseq([velPart1], ~nBars);\r\n\t\t\t})\r\n\t\t], 6),\r\n\t\t// 9 to 13\r\n\t\tPseq([\r\n\t\t\tPlazy({\r\n\t\t\t\t~nBars = (12..24).choose;\r\n\t\t\t\t(\"\" ++ ~phrase ++ \".1: \" ++ ~nBars).postln;\r\n\t\t\t\tPseq([velPart1], ~nBars);\r\n\t\t\t}),\r\n\t\t\tPlazy({\r\n\t\t\t\t~nBars = (4..16).choose;\r\n\t\t\t\t(\"\" ++ ~phrase ++ \".2: \" ++ ~nBars).postln;\r\n\t\t\t\t~phrase = ~phrase + 1;\r\n\t\t\t\tPseq([velPart1], ~nBars);\r\n\t\t\t})\r\n\t\t], 5),\r\n\t\t// 14\r\n\t\tPlazy({\r\n\t\t\t~nBars = (4..8).choose;\r\n\t\t\t(\"\" ++ ~phrase ++ \": \" ++ ~nBars).postln;\r\n\t\t\t~phrase = ~phrase + 1;\r\n\t\t\tPseq([velPart1], ~nBars)*pCrescendo.value(sPart1 * ~nBars, true);\r\n\t\t}),\r\n\t\t// 15\r\n\t\tPlazy({\r\n\t\t\t~nBars = (4..8).choose;\r\n\t\t\t(\"\" ++ ~phrase ++ \": \" ++ ~nBars).postln;\r\n\t\t\t~phrase = ~phrase + 1;\r\n\t\t\tPseq([velPart1]*0, ~nBars);\r\n\t\t}),\r\n\t\t// 16\r\n\t\tPlazy({\r\n\t\t\t\"*** Part 2 ***\".postln;\r\n\t\t\t~nBars = (6..8).choose;\r\n\t\t\t(\"\" ++ ~phrase ++ \": \" ++ ~nBars).postln;\r\n\t\t\t~phrase = ~phrase + 1;\r\n\t\t\tPseq([velPart2]*0, ~nBars);\r\n\t\t}),\r\n\t\t// 17.1\r\n\t\tPlazy({\r\n\t\t\t~nBars = (16..32).choose;\r\n\t\t\t(\"\" ++ ~phrase ++ \".1: \" ++ ~nBars).postln;\r\n\t\t\tPseq([velPart2], ~nBars)*pCrescendo.value(sPart2 * ~nBars);\r\n\t\t}),\r\n\t\t// 17.2\r\n\t\tPlazy({\r\n\t\t\t~nBars = (6..18).choose;\r\n\t\t\t(\"\" ++ ~phrase ++ \".2: \" ++ ~nBars).postln;\r\n\t\t\t~phrase = ~phrase + 1;\r\n\t\t\tPseq([velPart2], ~nBars);\r\n\t\t}),\r\n\t\t// 18 to 24\r\n\t\tPseq([\r\n\t\t\tPlazy({\r\n\t\t\t\t~nBars = (16..32).choose;\r\n\t\t\t\t(\"\" ++ ~phrase ++ \".1: \" ++ ~nBars).postln;\r\n\t\t\t\tPseq([velPart2], ~nBars);\r\n\t\t\t}),\r\n\t\t\tPlazy({\r\n\t\t\t\t~nBars = (6..18).choose;\r\n\t\t\t\t(\"\" ++ ~phrase ++ \".2: \" ++ ~nBars).postln;\r\n\t\t\t\t~phrase = ~phrase + 1;\r\n\t\t\t\tPseq([velPart2], ~nBars);\r\n\t\t\t})\r\n\t\t], 7),\r\n\t\t// 25\r\n\t\tPlazy({\r\n\t\t\t~nBars = (8..24).choose;\r\n\t\t\t(\"\" ++ ~phrase ++ \": \" ++ ~nBars).postln;\r\n\t\t\t~phrase = ~phrase + 1;\r\n\t\t\tPseq([velPart2], ~nBars);\r\n\t\t}),\r\n\t\t// 26\r\n\t\tPlazy({\r\n\t\t\t~nBars = (8..16).choose;\r\n\t\t\t(\"\" ++ ~phrase ++ \": \" ++ ~nBars).postln;\r\n\t\t\t~phrase = ~phrase + 1;\r\n\t\t\tPseq([velPart2], ~nBars);\r\n\t\t}),\r\n\t\t// 26a\r\n\t\tPlazy({\r\n\t\t\t\"*** Part 3 ***\".postln;\r\n\t\t\tPseq(velPattern); // Just 2 notes\r\n\t\t}),\r\n\t\t// 27\r\n\t\tPlazy({\r\n\t\t\t~nBars = (8..24).choose;\r\n\t\t\t(\"\" ++ ~phrase ++ \": \" ++ ~nBars).postln;\r\n\t\t\t~phrase = ~phrase + 1;\r\n\t\t\tPseq([velPart3], ~nBars);\r\n\t\t}),\r\n\t\t// 28.1\r\n\t\tPlazy({\r\n\t\t\t// Left piano chooses crescendo length\r\n\t\t\t(\"\" ++ ~phrase ++ \".1: \" ++ ~nBars).postln;\r\n\t\t\tPseq([velPart3], ~nBars);\r\n\t\t}),\r\n\t\t// 28.2\r\n\t\tPlazy({\r\n\t\t\t~nBars = (16..32).choose;\r\n\t\t\t(\"\" ++ ~phrase ++ \".2: \" ++ ~nBars).postln;\r\n\t\t\t~phrase = ~phrase + 1;\r\n\t\t\tPseq([velPart3], ~nBars);\r\n\t\t}),\r\n\t\t// 29 to 31\r\n\t\tPseq([\r\n\t\t\tPlazy({\r\n\t\t\t\t~nBars = (48..60).choose;\r\n\t\t\t\t(\"\" ++ ~phrase ++ \".1: \" ++ ~nBars).postln;\r\n\t\t\t\tPseq([velPart3], ~nBars);\r\n\t\t\t}),\r\n\t\t\tPlazy({\r\n\t\t\t\t~nBars = (16..32).choose;\r\n\t\t\t\t(\"\" ++ ~phrase ++ \".2: \" ++ ~nBars).postln;\r\n\t\t\t\t~phrase = ~phrase + 1;\r\n\t\t\t\tPseq([velPart3], ~nBars);\r\n\t\t\t}),\r\n\t\t], 3),\r\n\t\t// 32\r\n\t\t// Catching up the missing bar and playing one extra to let left decide how long\r\n\t\tPlazy({\r\n\t\t\t(\"\" ++ ~phrase ++ \": ?\").postln;\r\n\t\t\tPseq([velPart3], 2);\r\n\t\t}),\r\n\t\tPif(Pfunc({~theEnd.not}),\r\n\t\t\tPseq([\r\n\t\t\t\tPlazy({\r\n\t\t\t\t\tPseq([velPart3]);\r\n\t\t\t\t})\r\n\t\t\t], inf)\r\n\t\t),\r\n\t\tPlazy({\r\n\t\t\t\"*** Nod back ***\".postln;\r\n\t\t\tPseq([velPart3], 4);\r\n\t\t}),\r\n\t\t// And wait\r\n\t\tRest(10)\r\n\t]),\r\n\t\\dur, Pseq([\r\n\t\t// 1 & 2.1\r\n\t\tPseq([Plazy({\r\n\t\t\tPseq([1], sPart1*~nBars);\r\n\t\t\t})\r\n\t\t], 2),\r\n\t\t// 2.2\r\n\t\tPlazy({\r\n\t\t\tpAccel.value(~nBars, sPart1);\r\n\t\t}),\r\n\t\t// 3 to 13\r\n\t\tPseq([\r\n\t\t\tPlazy({\r\n\t\t\t\tPseq([1], sPart1*~nBars);\r\n\t\t\t}),\r\n\t\t\tPlazy({\r\n\t\t\t\tpAccel.value(~nBars, sPart1);\r\n\t\t\t}),\r\n\t\t], 11),\r\n\t\t// 14 and 15\r\n\t\tPseq([Plazy({\r\n\t\t\tPseq([1], sPart1*~nBars);\r\n\t\t\t})\r\n\t\t], 2),\r\n\t\t// 16 and 17.1\r\n\t\tPseq([Plazy({\r\n\t\t\tPseq([1], sPart2*~nBars);\r\n\t\t\t})\r\n\t\t], 2),\r\n\t\t// 17.2\r\n\t\tPlazy({\r\n\t\t\tpAccel.value(~nBars, sPart2);\r\n\t\t}),\r\n\t\t// 18 to 24\r\n\t\tPseq([\r\n\t\t\tPlazy({\r\n\t\t\t\tPseq([1], sPart2*~nBars);\r\n\t\t\t}),\r\n\t\t\tPlazy({\r\n\t\t\t\tpAccel.value(~nBars, sPart2);\r\n\t\t\t}),\r\n\t\t], 7),\r\n\t\t// 25 and 26\r\n\t\tPseq([\r\n\t\t\tPlazy({\r\n\t\t\t\tPseq([1], sPart2*~nBars);\r\n\t\t\t})\r\n\t\t], 2),\r\n\t\t// 26a\r\n\t\tPseq([1], 2),\r\n\t\t// 27 and 28.1\r\n\t\tPseq([\r\n\t\t\tPlazy({\r\n\t\t\t\tPseq([1], sPart3*~nBars);\r\n\t\t\t})\r\n\t\t], 2),\r\n\t\t// 28.2\r\n\t\tPlazy({\r\n\t\t\tpAccel.value(~nBars, sPart3);\r\n\t\t}),\r\n\t\t// 29 to 31\r\n\t\tPseq([\r\n\t\t\tPlazy({\r\n\t\t\t\tPseq([1], sPart3*~nBars);\r\n\t\t\t}),\r\n\t\t\tPlazy({\r\n\t\t\t\tpAccel.value(~nBars, sPart3);\r\n\t\t\t}),\r\n\t\t], 3),\r\n\t\t// 32\r\n\t\t// Catching up and one extra\r\n\t\tPseq([1], sPart3*2),\r\n\t\tPif(Pfunc({~theEnd.not}),\r\n\t\t\tPseq(Array.fill(sPart3, 1), inf)\r\n\t\t),\r\n\t\tPlazy({\r\n\t\t\tPseq([1], sPart3*4)\r\n\t\t}),\r\n\t\t// And wait\r\n\t\tRest(10)\r\n\t]),\r\n\t\\midinote, Pseq([\r\n\t\t// 1 to 15\r\n\t\tPseq([\r\n\t\t\tPlazy({\r\n\t\t\t\tPseq(midiPart1, ~nBars);\r\n\t\t\t})\r\n\t\t], 27),\r\n\t\t// 16 to 24\r\n\t\tPseq([\r\n\t\t\tPlazy({\r\n\t\t\t\tPseq(midiPart2R, ~nBars);\r\n\t\t\t})\r\n\t\t], 17),\r\n\t\t// 25 and 26 (same as before but for debug reasons)\r\n\t\tPseq([\r\n\t\t\tPlazy({\r\n\t\t\t\tPseq(midiPart2R, ~nBars);\r\n\t\t\t})\r\n\t\t], 2),\r\n\t\t// 26a\r\n\t\tPseq(midiPart2R[0..1]),\r\n\t\t// 27 to 31\r\n\t\tPseq([\r\n\t\t\tPlazy({\r\n\t\t\t\tPseq(midiPart3, ~nBars);\r\n\t\t\t})\r\n\t\t], 9),\r\n\t\t// 32\r\n\t\t// Catching up and one extra\r\n\t\tPseq(midiPart3, 2),\r\n\t\tPif(Pfunc({~theEnd.not}),\r\n\t\t\tPseq(midiPart3, inf)\r\n\t\t),\r\n\t\tPseq(midiPart3, 4),\r\n\t\t// And wait\r\n\t\tRest(10)\r\n\t])\r\n);\r\nverbMix = 0.07;\r\nverbRoom = 0.8;\r\nverbDamp = 1;\r\n\r\n\r\n\r\npianoL = Pfxb(pianoL, \\lpf, \\freq, 4000);\r\npianoL = Pfxb(pianoL, \\delay, \\wet, 0.10);\r\npianoL = Pfxb(pianoL, \\reverb, \\mix, verbMix, \\room, verbRoom, \\damp, verbDamp);\r\npianoL.play(quant: 1);\r\n\r\npianoR = Pfxb(pianoR, \\lpf, \\freq, 3800);\r\npianoR = Pfxb(pianoR, \\delay, \\wet, 0.12);\r\npianoR = Pfxb(pianoR, \\reverb, \\mix, verbMix, \\room, verbRoom, \\damp, verbDamp);\r\npianoR.play(quant: #[1, 0, 0.1]);\r\n)",
   "labels" : [
      "patterns",
      "phasing",
      "piano"
   ]
}
