CPSC 431/531: Algorithmic and Heuristic Composition

Instructors: Donya Quick (2015) and Paul Hudak (prior years)

Course Description

From the course listing:

Study of the theoretical and practical fundamentals of computer-generated music, with a focus on high-level representations of music, algorithmic and heuristic composition, and programming languages for computer music generation. Theoretical concepts are supplemented with pragmatic issues expressed in a high-level programming language.

The focus of this course is on the fundamentals of high-level music representation and generation, including algorithmic and heuristic composition techniques, all from a programming-language centric point of view. At the same time, the course will teach you advanced ideas in programming languages through functional programming in Haskell, including higher-order functions, data abstraction, type systems, lazy evaluation, stream processing, monads, and arrows.

The course is suitable for Computer Science majors, Computing and the Arts majors, Music majors with the appropriate background, as well as any undergraduate or graduate student with a keen interest in computer music and advanced programming concepts. The computer music library that we have developed in Haskell is called Euterpea.

At the outset, you will have to learn Haskell programming basics. To do this, we will follow the same introductory material used in CPSC 432/532. Those students who took that course last year will find the early work easy, whereas new students will likely find it challenging. Therefore we will provide help sessions for new students in the first couple of weeks to facilitate learning Haskell.

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 designing a new GUI widget for Euterpea.

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.

Example Projects

Comments are closed.