Prewrite rewriting system
superclass: FilterPattern
Lindenmayer system pattern for selfsimilar structures.
Its dictionary (or event) maps one element to an array of child elements.
The algorithm replaces iteratively (levels deep) elements by
arrays of elements starting with the values in the pattern.
Prewrite(pattern, dictionary, levels)
dict:
IdentityDictionary[
elem1 -> [ otherElements ],
elem2 -> [ otherElements ],
elem2 -> [ otherElements ]
]
the examples use the shortcut for Event.
(
a = Prewrite(0, // start with 0
( 0: #[2,0],
1: #[0,0,1],
2: #[1,0,1]
), 4);
x = a.asStream;
30.do({ x.next.postln });
)
Prewrite used as a sequence of pitches:
(
SynthDef(\help_sinegrain,
{ arg out=0, freq=440, sustain=0.05;
var env;
env = EnvGen.kr(Env.perc(0.01, sustain, 0.2), doneAction:2);
Out.ar(out, SinOsc.ar(freq, 0, env))
}).add;
)
(
a = Prewrite(0, ( 0: #[2,0],
1: #[0,0,1],
2: #[1,0,1]
),
4).asStream;
Routine({
loop({
Synth(\help_sinegrain, [\freq, (a.next * 5 + 70).midicps]);
0.1.wait;
})
}).play;
)