Today's algorithmic composition tutorial looks at using OpenMusic to manipulate and generate musical material from tone rows.
If you haven't already got OpenMusic 6.5 installed you can download OpenMusic free for Mac and PC here. IRCAM supply a number of tutorials but you can also look through the OpenMusic tutorials available here.
Jump to the end of the post to hear some sample algorithmic music output from this patch.
Serialism developed as a framework for composing and organising atonally and moves away from the sense of a key by giving each pitch equal worth. This patch starts with a tone row from the Berg Violin Concerto:
G, Bb, D, F#, A, C, E, G#, B, C#, Eb, F
All pitches must be played through in order, in order to provide more melodic material the tone row can be transposed to any pitch, inverted and played backwards.
First we'll create our tone row (to create a new object CMD click and type in to the box created).
The repeat-n function will create 12 copies of our tone row. To evaluate the output of any object or function hold CMD and click on the output. Look in the Lisp listener window to see the results:
Add in the following objects by holding CMD, clicking and naming as below:
Double click on the omloop function and make the contents of omloop look like this:
Now we need to create the rhythms. We'll create these using rhythm trees, for a recap check OpenMusic Rhythm Trees part one and OpenMusic Rhythm Trees part two.
Create a new object (CMD click) and type patch. This create a subpatch, these subpatches are usually red and can be renamed once you've created it. Make the contents of your subpatch look like this:
Note values: 1/16 1/13 1/12 1/7
Rest values: 1/5 1/11 1/7
The choice between note or rest is made using the choix object from the OMAlea library. The OMAlea library is part of the standard OpenMusic distribution but you need to make sure that you have loaded it up in OpenMusic preferences. See the previous OMAlea post for details.
Your final patch should look something like this:
Adding in an om-random and om+ function will allow us to randomly tranpose each tone row:
We'll now create a variation of this patch that will play through the tone row harmonically. This patch uses a lot of the same material so to save yourself some work, select the patch in your workspace and press CMD D to duplicate your patch.
We'll now make some modifications. The new om-random function chooses between 1 and 5 notes to be played at a time, the group-list function will group the pitches from om-loop into groups based on this random selection:
If you want to have more or fewer rests change the probability value in the rhythm subpatch.
Finally we'll create a small composition from our patches using a maquette. The Maquette is a special container object that incorporates a time element. A Maquette can contain any musical object e.g. chord, voice, poly and other patches. You can create a maquette from the file menu (new Maquette) using the shortcut CMD2 or CTRL clicking in your workspace.
Once you've created your maquette drag one of your patches on to it. We'll make some changes to the patch to make the composition more interesting so select the patch in the Maquette and press 'a' the patch should turn red and is now an abstraction. Click on this patch and add the tempout and tempin objects (CMD click and type tempout, CMD click and type tempin).
Make sure you have a tempin and tempout object in each patch.
You can hear some sample output from this OpenMusic algorithmic composition tone row patch here:
This example explores some of the basic possibilities of using tone rows and the maquette to organise patches. Try to modify and expand these patches to explore your own ideas, for example integrating retrograde and inverted versions of the tone row and experimenting further with rhythmic density and development.
More algorithmic composition tutorials soon!