{
"title": "Compose-By-Chords Interactive Computer Music System",
"keywords": ["music composition", "computer music", "interactive music", "georgia tech"],
"date": "Fall 2004",
"desc": "An interactive computer music system allowing for on-the-fly compositions using chords",
"longdesc": "<p>As an avid clarinet player and listener of a <a href=\"../audiomatch/\">variety of different styles
of music</a>, 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.</p>

<p>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 <a
href=\"http://cycling74.com/products/maxmspjitter/\">Max/MSP</a>, created by
<a href=\"http://www.cycling74.com/\">Cycling '74 Studios</a>, which is the
de-facto standard for these kind of applications.</p>

<p>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.</p>

<p>To provide structure to the piece, a number of sliders are used for
different purposes:
<ul>
    <li>The most important slider is used for controlling the overall
    <i>energy</i> 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 <i>overdrive mode</i> to increase the
    excitement of the piece.</li>

    <li>The next slider controls the <i>broadness</i> 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.</li>

    <li>The counterpart to the 'broadness' dial (which controls mostly
    melodic elements) is the <i>rhythmic excitement</i> 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.</li>
</ul></p>

<p>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.</p>",


"images": [{
    "url": "images/compose-by-chords_01.jpg",
    "name": "Main Driver",
    "desc": "Each subsytem is color-coded for easy visual inspection of the
    composition of the entire system. Dark red is reset, light blue are inputs,
    yellow is the timing subsystem, light red is the arpeggiator, green is the
    chord generator, dark blue is rhythm section, cream is a monitoring system
    for the current selection of instruments, purple is the broadness
    subsystem, and orange is the energy subsystem."
}, {
    "url": "images/compose-by-chords_06.jpg",
    "name": "Rhythm Generator",
    "desc": "This is the subsystem which decides whether or not to repeat a
    previous set of rhythms or generate a new set. Light blue are inputs, green
    is the dispatcher which makes the decision, red is the history rhythm
    chooser, purple is the new rhythm generator, and yellow is the output."
}, {
    "url": "images/compose-by-chords_04.jpg",
    "name": "Broadness Subsystem",
    "desc": "This takes broadness values and decides the number and range of
    instruments of each type to have. Ligh blue are inputs, purple is the start
    of the decision process, where we decide the total number and range of
    instruments, green then decides the number of rhythm instruments, pink the
    chord instruments, and yellow the melody and arpeggio instruments."
}, {
    "url": "images/compose-by-chords_02.jpg",
    "name": "Arpeggiator",
    "desc": "This system is responsible for generating continuous arpeggios.
    Blue initiates the arpeggiator and sets the space from which to choose
    notes, red decides whether to ascend or descend, and green computes the
    actual values and performs error-checking."
}, {
    "url": "images/compose-by-chords_05.jpg",
    "name": "Chord Generator",
    "desc": "This simple component chooses the length of chord to play and
    sends the notes of the chord to the player component."
}, {
    "url": "images/compose-by-chords_03.jpg",
    "name": "Play Instrument",
    "desc": "This component is what all the different sections eventually lead
    to because it is responsible for actually generating the right sound, given
    an instrument, a pitch, duration, and other play parameters. The blue
    portion does routing and also plays synthesized notes (i.e., using
    Additive/Subtractive Synthesis, Frequency Modulation, etc.), the green
    portion plays MIDI percussion, and the red portion plays MIDI instruments."
}],

"thumbfmt": "%(base)s_tn.%(ext)s",

"relateds": [{"url": "../gt-surround-sounds/"}]

}
