A finite automaton is a sequence using a finite number of symbols generated according to specific rules. In the case of Johnson's Automatic Music, six percussionists each have only two notes, high and low, and the alphabet is limited to 1 (the low note), 2 (the high note), and 3 (a silence) using the following rules:
1 --> 1 1 2
2 --> 3 2
3 --> 3 3
Beginning with 1 generates the following sequence:
112112321121123233321121123211211232333233333332
Using this automaton it's easy to generate long sequences of numbers that can be then mapped to musical parameters. As ever with algorithmic composition, once you've created your patch or program it's easy to manipulate the formula or remap the musical output to generate new pieces.
Let's have a look at a simple example using PureData and Max. This screenshot shows the generation part of our algorithm in PureData.
The until object will output 500 bangs when the above message is clicked on, the counter outputs a running count of these bangs and this is used as a number to lookup the stored value in the coll object. The output of the coll is connected to a select object and this triggers the new messages that are stored within our coll object.
In Max the patch looks very similar though note the use of Uzi rather than the PureData until object.
To generate musical material from this you can apply a simple pitch mapping. Here we've mapped 1 and 2 to pitches and 3 is not connected to anything and so functions as a rest.
And in Max:
Tom Johnson uses the finite automata to create a canon, so in this example I've copied and pasted a large part of the above patch three times and for each part used a minus object to offset each part 64 counts creating our canon. Each of the four parts has two different notes from the harmonic series selected.
And in Max
You may want to lower the velocities of the higher notes.
You can hear some simple sample output from this algorithm here
There are plenty of opportunities to alter and expand this simple use of finite automatons to produce other algorithmic compositions. Some simple examples include, experimenting with different pitch mappings, use rhythm and dynamic mappings and trying some alternative rules to the ones used in this example:
1 --> 1 1 2
2 --> 3 2
3 --> 3 3
We'll look at other algorithmic composition techniques in future tutorials using Max, PureData, OpenMusic andother software so do check back for more algorithmic composition tutorials soon.
No comments:
Post a Comment