Home : Tune Toys : Expresso 
  Expresso takes a simple musical expression (literally "X") and mutates it. In each generation, transformations are applied to components of the expression. This is a fractal technique known as an L-system. The more generations there are, the larger and more complex the expression gets (and the longer it can take to compute). The output varies wildly, from boring to fascinating. Press "Mutate" a few times till you get something that looks interesting, then click on the image to play it. See Composer's Quarry for examples of output.

Transformations:
Seed:
Randomize seed:
Generations:
Phrase for X:
# of Tracks:
Randomize patches:
 

Results may not appear for a few seconds.
Be patient!
Do you like this result? Do you want to let other people listen to it?

Save this one in the
Tune Trove!


See what's already
in the Tune Trove!

After 20 generations the expression "X" became this:
echo((transpose(echo(((transpose(transpose(shuffle(echo(transpose(transpose(transpose(((X+transpose(X,4) ) +transpose(X,7) ) ,-5) ,-5) ,-5) ,4,6) ) ,4) ,-7) |shuffle(transpose((shuffle(((transpose((arpeggio(X) +transpose(X,-7) ) ,-5) +transpose((step(transpose(X,4) ,12) +transpose((transpose(X,4) +transpose(X,12) ) ,7) ) ,12) ) |shuffle((transpose(X,4) |echo(X,4,6) ) ) ) ) +transpose(((step(transpose(X,4) ,12) +transpose(step(shuffle((((((transpose(X,-5) +X) +transpose(transpose(X,4) ,12) ) |(((X+X) |X) |arpeggio(arpeggio(X) ) ) ) +transpose(transpose(transpose(X,-7) ,-7) ,4) ) +transpose(step(shuffle(((X+transpose(X,7) ) +X) ) ,12) ,7) ) ) ,12) ,4) ) +transpose(arpeggio(transpose(shuffle(transpose(transpose((transpose(X,-7) +transpose(echo(X,4,6) ,7) ) ,-7) ,4) ) ,-5) ) ,7) ) ,12) ) ,-5) ) ) +transpose(transpose(shuffle((transpose(shuffle(transpose((X+transpose(X,-7) ) ,-7) ) ,-7) +transpose(((((transpose(echo(transpose(X,-7) ,4,6) ,-7) +transpose(((X+X) |X) ,7) ) |(((((transpose(X,4) |echo(X,4,6) ) |transpose(X,4) ) +transpose(((transpose(X,-5) +transpose(transpose(X,4) ,4) ) +transpose((X+X) ,7) ) ,4) ) +transpose(((echo(transpose(X,-5) ,4,6) +transpose(transpose(X,4) ,4) ) +transpose(((X+transpose(X,4) ) +transpose(X,7) ) ,7) ) ,7) ) |step((transpose(transpose(X,4) ,-7) +transpose(echo(transpose(X,4) ,4,6) ,12) ) ,12) ) ) +transpose(transpose(transpose(step(X,12) ,-5) ,-5) ,4) ) +transpose(((((transpose(X,-5) |transpose(transpose(X,-5) ,4) ) +transpose((transpose(X,4) +transpose(echo(X,4,6) ,4) ) ,4) ) +transpose(transpose(transpose(transpose(X,4) ,-7) ,4) ,7) ) +transpose(transpose((transpose(X,4) +((X+X) +transpose(arpeggio(X) ,12) ) ) ,-7) ,12) ) ,4) ) ,7) ) ) ,4) ,12) ) ,4,6) ,4) +((step(echo(step((((arpeggio((transpose(X,4) +X) ) +transpose(arpeggio(transpose((X+transpose(X,12) ) ,4) ) ,7) ) +((transpose(X,-5) +transpose((transpose(X,-7) |(((X+X) +transpose((((X+X) +transpose(transpose(X,4) ,4) ) +transpose(X,7) ) ,4) ) +transpose(transpose((X+X) ,-5) ,7) ) ) ,4) ) +transpose((step(X,12) |((((X+transpose(X,7) ) +transpose(X,4) ) +transpose((X+transpose(X,7) ) ,7) ) +echo(X,4,6) ) ) ,7) ) ) |echo(transpose(transpose(step((shuffle(X) +transpose((X|X) ,12) ) ,12) ,4) ,-7) ,4,6) ) ,12) ,4,6) ,12) +transpose(arpeggio(transpose(transpose(transpose(transpose(transpose(shuffle(X) ,4) ,4) ,-7) ,4) ,4) ) ,4) ) +transpose(((transpose((((transpose(transpose(echo(X,4,6) ,-7) ,4) +shuffle(transpose(X,-5) ) ) +transpose((transpose((shuffle((((X+X) +transpose((X|X) ,4) ) +transpose(X,7) ) ) +transpose((((X|X) +transpose(X,4) ) +transpose(((X+transpose(X,4) ) +transpose(X,7) ) ,7) ) ,12) ) ,-5) |transpose(transpose(((X+X) +transpose(transpose(echo(X,4,6) ,-7) ,7) ) ,4) ,-7) ) ,12) ) |echo((transpose(transpose(transpose(X,-5) ,-5) ,-7) +((shuffle(X) +transpose(echo(X,4,6) ,4) ) +transpose(transpose(transpose(X,4) ,4) ,7) ) ) ,4,6) ) ,4) +transpose(transpose(shuffle((transpose(X,-7) +transpose(step((X+transpose(X,12) ) ,12) ,12) ) ) ,4) ,-5) ) +((transpose((((X+transpose(transpose(X,-5) ,7) ) +(((X+transpose(X,7) ) |X) +transpose(transpose((X|X) ,-5) ,7) ) ) +(((X+transpose(X,12) ) |arpeggio(X) ) |(((X+transpose(X,4) ) +transpose(X,7) ) +transpose(X,7) ) ) ) ,-5) +transpose(arpeggio((transpose(X,-7) +transpose((((X|X) +transpose(X,7) ) +transpose(transpose((X+transpose(X,7) ) ,4) ,7) ) ,7) ) ) ,12) ) +transpose(((((((step(X,12) +transpose((X|(X+transpose(X,7) ) ) ,12) ) +transpose((((X+transpose(X,4) ) +transpose(X,7) ) |(X|X) ) ,12) ) +transpose(echo(((X+transpose(X,4) ) +transpose(X,7) ) ,4,6) ,4) ) +transpose(transpose(arpeggio(transpose((X+transpose(X,7) ) ,-7) ) ,-5) ,7) ) +(transpose((X+transpose((echo(transpose(X,-7) ,4,6) +transpose(arpeggio(X) ,7) ) ,7) ) ,4) +echo((((X+X) +transpose(X,7) ) |transpose((transpose(X,-5) +(X|X) ) ,-5) ) ,4,6) ) ) +shuffle(((X|(((transpose(X,-7) +transpose(X,-5) ) +transpose(((X+transpose(X,4) ) +transpose(shuffle(X) ,7) ) ,4) ) +transpose(echo(transpose(X,4) ,4,6) ,7) ) ) |transpose(shuffle(X) ,-7) ) ) ) ,7) ) ) ,7) ) ) ,4,6)
random seed used was 98502170

The algorithm for Expresso is written in KeyKit, and here's the source code.