Instructors: Donya Quick (2016) and Paul Hudak (prior years)
From the course listing:
Study of the theoretical and practical fundamentals of computer-generated music, with a focus on low-level sound representation, acoustics and sound synthesis, scales and tuning systems, and programming languages for computer music generation. Theoretical concepts are supplemented with pragmatic issues expressed in a high-level programming language.
This course is a study of computer music concepts at the sound level: audio processing, sound synthesis, and instrument sound design. At the same time, the course will teach you advanced ideas in programming languages: e.g. functional programming in Haskell, higher-order functions, data abstraction, type systems, lazy evaluation, and stream processing. At the outset, you will have to learn Haskell programming basics. To do this, we will follow some of the same introductory material used in CPSC 431/531, although the material will diverge soon after and follow topics specifically related to sound.
How much music do I need to know to take this course?
The truth is, not much. It is sufficient that you understand standard music notation, and a little about scales and chords. You do not need to know much music theory, and you do not need to play an instrument. Of course, the more you know about music, the more you will be able to apply the concepts learned in this class in musically creative ways. This will be especially useful for your final project, but it is also acceptable to do a non-musical final project, for example one involving special effects (acoustics, reverb, distortion, etc.) or some other audio processing capability (e.g. changing tempo without changing pitch, automatic harmonization, etc.).
Note: this is not a course on how to use commercial music technology. For those interested in learning about commercial software for music production, please consider taking one of the courses offered in the Department of Music or School of Music.