About#
Introduction to Computer Music teaches the principles of computer music theory and practice from a computer science perspective, in Python. Students learn how sound is represented digitally, how to synthesize and manipulate it, and how to build musical systems or accomplish creative goals. The course is taught simultaneously to both undergraduate (322) and graduate (622) sections.
This course is both technical and creative — think of it as the musical equivalent to a CS course on computer graphics. Projects will task you to both (i) apply technical skills to create musical tools and (ii) exercise your creativity using those tools, culminating in open-ended creative assignments and a final project. A background in programming and Python is required (15-112 or equivalent at a minimum), but formal training in music is not.
Who is this for?#
This course on computer music is highly technical, and it is intended for computer science students who are interested in creating music and understanding fundamental concepts in computer audio. We will assume that the student has a strong background in computer science but a music background is not required. We have designed the course to allow students with skills in music to use their knowledge and creativity, though students with little computing background may struggle.
Programming: This course assumes familiarity with Python programming and basic computer science (e.g., data structures, Big O notation). If you are unfamiliar with these, you should learn the basics before proceeding.
Math: You should be reasonably comfortable with trigonometry, basic calculus, and complex numbers. You won’t have to do much derivation here, but you’ll need to understand these concepts at least at a high level. It’s okay if your skills are rusty — we will review any tricky subjects as needed. The TA’s are also available to help brush-up.
Music: We aspire to make this course accessible even to those without any formal musical training. However, you will benefit from a basic foundation in musical concepts like pitch, and from an enthusiastic and discerning ear for music.
Learning goals#
By the end of the course, students will learn:
Computer programming for the synthesis and manipulation of sound at a low level
Fundamental digital signal processing concepts like sampling theory, convolution, and the Discrete Fourier Transform
How to combine synthesis and processing techniques to accomplish creative goals in computer music
Acknowledgements#
This revamped version of ICM was created by instructor Chris Donahue. This would not have been possible without contributions and inspiration from:
David Liu (TA) for significant contributions to the revamped course content
Marco Cardenes (TA) for significant contributions to the revamped course content
Ben Stoler for significant contributions to
pyquistand an earlier attempt at the revamped courseRoger Dannenberg for paving the way for this course, and computer music more broadly, at CMU
Tom Cortina for co-teaching the previous version of ICM and general teaching inspiration
Brian McFee for the inspirational DST textbook and
librosalibrary