The method behind The Shape of Song


diagram of Mary Had a Little Lamb
For example, the picture above was built from the first line of a very simple piece: Mary Had a Little Lamb. Each arch connects two identical passages. To clarify the connection between the visualization and the song, in this diagram the score is displayed beneath the arches.

This diagram visualizes the refrain from the folk song Clementine. As you would expect, the refrain consists of multiple repetitions of the same passage--and that is exactly what the diagram shows. The score isn't shown in this diagram since the notes would be too small to read.

More complex compositions create more intricate diagrams. The diagram above represents one of the Goldberg Variations. It shows that the piece divides into two main parts, each made of a long passage played twice--or what a musician would call an "AABB" structure.

The diagram, however, provides much more detailed information than the simple "AABB" notation. For instance, you can see that the A and B passages are loosely related, as shown by the bundle of thin arcs connecting the two halves of the piece.

About MIDI music files

The software used in the piece analyzes "MIDI" files, which are widely available on the web. Unlike other common sound files (such as MP3) a MIDI file contains a description of the notes in the musical score that is simple and amenable to analysis.

One peculiarity of MIDI files is that they can be divided into several tracks, which typically represent different instruments or voices. The software in The Shape of Song analyzes each track separately, since each instrument often has a unique pattern of repetitions.

Because most MIDI files are made by humans playing synthesizers, each file has unique timing and rhythm characteristics, which influence the diagrams seen in the piece.

About the software

The software in this piece is written entirely in Java, with an applet to handle user interface and visualization and a servlet used to read MIDI files from the web.

<< Back to home