Pieces of Wood - Steve Reich

After all the new stuff learned in the previous tutorial, this one will seem more conventional and perhaps musically more satisfying as well.

Steve Reich is famous for writing works, such as Pieces of Wood, which utilise repetition as a major compositional device. Of course, repetition is quite easy for a computer, and for jMusic. The class is very long because the piece is lengthy, and so not all of it will be shown here. The code becomes quite repetitive because each phrase in the piece is similar.

Click here to view source.

To hear the result play this MIDI file.

Let's have a closer look.

import jm.util.*;
import jm.music.data.*;
import jm.JMC;
import jm.music.tools.*

public final class PiecesOfWood implements JMC{
public static void main(String[] args){
//Create the data objects we want to use
Score score = new Score("Music for Pieces of Wood", 120);
//set: name, instrument, channel
Part clave1 = new Part("Clave 1", 116, 0);
Part clave2 = new Part("Clave 2", 116, 1);
Part clave3 = new Part("Clave 3", 116, 2);
Part clave4 = new Part("Clave 4", 116, 3);
Part clave5 = new Part("Clave 5", 116, 4);

//The music for phrase 1.
Phrase c1Phr1 = new Phrase(0.0);
int[] pitchArray = {DS7,REST,DS7,REST,DS7,REST,DS7,REST,DS7,
REST,DS7,REST};
double[] rhythmArray = {0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,
0.5,0.5};
c1Phr1.addNoteList(pitchArray, rhythmArray);
Mod.repeat(c1Phr1, 55);
//up to page 4 bar 3
clave1.addPhrase(c1Phr1);
//c1 up to beat 336

Lines 1-4 import useful packages that we need to use in the program.

In the next section the class is defined and told to use (implement) the JMC constants from jMusic. There is only one method in this class, the main() method. It is very long and only the first section is shown here. The piece is for 5 percussionists and the the score and five parts are first declared.

Next, one of the phrases for one of the parts is described. Because the piece is known (not algorithmic), pitch and rhythm arrays are used to create a phrase with the addNoteArray() phrase method. pitches are in an array of integers, while rhythmic values are in an array of double precision numbers (doubles). After adding the notes to the phrase it is looped 55 times. This first bar is looped often because it forms the basic beat upon which other rhythms are built. Finally, the phrase is added to the first clave part.

Routines similar to this are repeated for each rhythm of the piece. See the source code for more detail.

The use of jMusic to encode works in this way is not specifically 'compositional' but such exercises do show how particular compositional forms can be realised in jMusic. In this case a creative variation might be to retain the repetitive rhythm structure with new algorithmically generated rhythms.