Compose-By-Chords Interactive Computer Music System
As an avid clarinet player and listener of a variety of different styles of music, I have naturally been drawn towards the third area of music: composition. Combining my love for music with my fascination with computer science, I worked on an interactive computer music system that would allow people to create music on-the-fly by simply playing chords that interested them. Similar in concept to the idea of "tone-poems" that guided the work of many romantic composers, this system believes that the important (i.e., musical and emotional) aspects of a piece of a music are largely guided by the interplay of different chords. However, to allow the composer to control other aspects of his creation, various high-level concepts have to be somehow translated into lower-level implementation details -- a challenging problem.
My approach was to decide on a list of high-level aspects of music such as 'energy', 'broadness', and 'excitement'. These are controlled through the use of a MIDI-keyboard and sliders. Their values are then routed into a computer program which generates music according to these parameters. I used the graphical programming language Max/MSP, created by Cycling '74 Studios, which is the de-facto standard for these kind of applications.
First and foremost on my list is the ability for the composer to play chords on the keyboard which form the basis of the music that the computer creates. This list of chords is stored in a database for use later in the piece, thus utilizing the well-known elements of repetition and theme-and-variations. These chords are not only played in various inversions and octaves, but also determine the pitches for various arpeggiators and melodic generators.
To provide structure to the piece, a number of sliders are used for different purposes:
- The most important slider is used for controlling the overall energy of the piece. This controls the volume (most obviously), but also elements such as the tempo of the piece. Exceeding certain thresholds will also cut the song into overdrive mode to increase the excitement of the piece.
- The next slider controls the broadness of the piece. This refers to the number of instruments playing simultaneously, the level of polyphony (number of independent musical lines playing), the range of the instruments playing (i.e., number of octaves), etc. A piece with a narrow broadness value will sound constricted or 'simple', while one with a high value will sound much more frenetic or complex.
- The counterpart to the 'broadness' dial (which controls mostly melodic elements) is the rhythmic excitement dial, which controls the level of complexity and dominance of the rhythm aspects of the music. Thus, as this dial is increased, the number of percussion instruments increases, and the rhythms exhibited in the piece (including the melodic lines) become more complex and involved. For example, syncopation (accenting off-beats) and hemiola (overlapping non-congruent rhythms) effects are more evident at higher values of the rhythm dial.
Based on these controls, the computer generates all the music that is played. It decides on the exact number and the specific instruments used, the rhythms for the chords, arpeggios and melodies, and all other physical aspects of the played music. The instruments are chosen from a pre-defined bank of midi, recorded, and other instruments. Obviously, a large portion of this program is guided by stochastic choices, which try to emulate realistic playing by frequently using previous material, with an obvious bias towards more recently played motifs.
The original Max/MSP patches and other related code for the compose-by-chords system.