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;

)