There will be no mid-term or final exam, but there will be a final project, of your choosing. The project can be:
- An algorithmic composition of some sort, at the sound level.
- A software tool of some sort that would be a useful library for Euterpea users.
- 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. - Your project must be written in Euterpea/Haskell, but it can interface to other
software components if appropriate. - It’s Ok do a team project, but there should be significant content to it for
each participant. I recommend discussing such ideas with me first.
The final deliverables should include the code (of course), and a write-up describing the code. The latter may be incorporated with the code if you are very careful to use literate programming style with a liberal amount of English text, or even to make it an executable LaTeX file (which is, for example, how I am writing HSoM). In any case, there should be at least a one-page description of the overall project.
Concrete Suggestions for a Final Project
- A “pluck” library, as mentioned in class, modeled after csound’s pluck opcode. There is lots of documentation available for this and the outline of some code is already in Euterpea.
- Focus on percussion, but figure out how to programmatically distinguish between different percussion instruments (wood blocks, bongos, bass drum, snare drum, tom-tom, timpani, etc.), perhaps (but not necessarily) by developing a more sophisticated model (using waveguides or whatever).
- A physical model of something. I have a textbook that describes physical models of a slide flute, blown bottle, the sound of footstesp (!), strings, . You are welcome to choose somethings from that.
- Model the sympathetic resonance of piano strings that depends on whether or not the sustain pedal is down.
- Model the feedback of an electric guitar and amplifier, along with some degree of expressiveness in controlling the sound.
- Model the articulation of a conventional instrument. For example, model the slurring of one note into the next, note bends, staccato or legato, etc. Once control of the proper parameters is enabled, the task then becomes one of making it sound realistic, natural, and aesthetically pleasing.
- Model the bowing of a violin or other string instrument. If done well, using physical modeling, one should be able to bow a variety of physical objects, like a bowl.
- Model some weird sounds, like a creaking door, thunder, footsteps (on a wooden floor, or on crispy leaves in the fall), a dog’s bark, a cat’s meow, or whatever.
- Some kind of audio processing. For example, distortion, flanger, echo, reverb, chorusing, compression / limiter, wah-wah, a “Leslie”, and so on. (A Leslie is a speaker system that has a motor that rotates the speaker, using the Doppler effect to give a vibrato-like sound.)
- Speech synthesis using “formants”. I don’t know much about this but I am sure there are plenty of easy-to-find references.
- A filter library. Use the power of functional programming to create a general “IIR filter generator”, where you just give a list of zeros and poles, and a filter is created for you. You would have to know something about signal processing to do this.
- A multi-band equalizer, related to the above, but “engineered” more for a studio technician or musician or audiophile.
- Compose a piece of music using instruments you have designed yourself.
- Compose a “soundscape” – a canvas of sound that evolves over time, incorporating perhaps many of the techniques learned in this class.
- Compose something that would be difficult for a conventional instrument to play, for example a piece based on microtonal music, or in general odd scales or modes.
- Use fractals, L-Systems, or some other technique learned in CPSC 431 to generate signals, instead of notes. There are several says to do this, and references in the literature may be consulted. For example, I have a text that describes using the Lorenz attractor, the Rossler attractor, and a model of a planet orbiting a binary star system, to make some interesting sounds.