Final Project
Home Introduction Grading Reading Computing Resources Software Resources Syllabus Assignments Final Project

 

General guidelines on choosing a final project:

  1. It can be an algorithmic composition of some sort.
  2. It can be a software tool of some sort for any computer music application.
  3. If you generate some music, you should put in as much artistic effort as you can – we want it to sound good!  However, there should be CS content too, otherwise this course would be hard to justify for computer science credit.
  4. I require that your project be written in Haskell, unless you have very good reason to use another language.
  5. It's Ok do a team project, but there should be significant content to it for each participant.  You should discuss team projects with me first.

Some ideas for projects:

  1. Composition:
    bulletSerial music composition
    [generate a 12-tone row, then apply transformations (inversion, retrograde, etc.) to it]
    bulletFractals / Clusters / Iterated Function Systems
    bulletL-Systems or other grammar-based approach
    [consider, for example, a grammar to capture traditional structure/form]
    bulletStochastic methods / Markov Chains
    bulletTraditional species counterpoint
    bulletGeneral accompaniment / embellishment
    [i.e. take an existing piece of music and add something to it -- given a melody and basic harmonic structure, add a a bass line, a  melodic embellishment, or a melodic harmony]
    bulletMimic some aspect of "Band-in-a-Box"
    [given a set of chord changes, and a "style" (say jazz, rock, or latin), add a rhythm section (e.g. piano or guitar "comp"), drums, bass, and, if you are ambitious, a "soloist"]
    bulletRe-harmonizer
    [given an existing piece of music, re-harmonize it -- choose different chord sequences that still work with the melody, or that perhaps require small changes to the melody]
    bulletDueling banjos
    [model the improvisational process is some way]
    bulletAd hoc algorithmic composition
    [e.g. chord-chart composition]
    bulletGenetic / evolutionary algorithms
  2. Real-Time:
    bulletTake any of the ideas above, and make it real-time.
    bulletIn particular, take Midi input and use it to control part of the music generation process.
    bulletWrite a music-based game.
  3. Performance / analysis
    bulletArticulation
    bulletDynamics
    bulletPhrasing
    bulletSlurs
    bulletEmbellishment
    bulletAutomated Schenkerian (or related) analysis
    bulletCodification of aesthetics
  4. Haskore Infrastructure:
    bulletAdd widgets to Haskore's graphical musical interface
    bulletBackend for csound, SuperCollider, or similar music software package
    bulletMidi extensions
    [for Midi files, Midi in, and Midi out, such as aftertouch, pitch bend, and so on]
    bulletEnhance / change the basic structure of players
    [e.g. to take into account key]
    bulletNotation
    [e.g. a LilyPond interface]