15-323 / 15-623
Computer Music Systems and Information Processing


Prof. Roger Dannenberg

Email: rbd at cs.cmu.edu

Location: GHC 7003

Office hours: Mon 2pm-3:15pm


Sara Adkins

Email: sadkins at andrew.cmu.edu

Location: Citadel Teaching Commons
(GHC 5th floor)

Office hours: Wednesday, 4-6pm


Class Times: Tuesday and Thursday, noon-1:20pm

Location: GHC 4211

This course presents concepts and techniques for representing and manipulating discrete music information, both in real time and off line. Representations of music as explicitly timed event sequences will be introduced, and students will learn how to build efficient run-time systems for event scheduling, tempo control, and interactive processing. The MIDI protocol is used to capture real-time performance information and to generate sound. The course will also cover non-real-time processing of music data, including Markov models, style recognition, computer accompaniment, query-by-humming, and algorithmic composition. This course is independent of, and complementary to 15-322, Introduction to Computer Music, which focuses on sound synthesis and signal processing. The pre-requisite for this course is 15-122.

For class discussion,we will be using Piazza. The system is highly catered to getting you help fast and efficiently from classmates, the TA, and myself. Rather than emailing questions to the teaching staff, I encourage you to post your questions on Piazza.

For handing in homeworks, projects, and checking your grades and comments, we will be using Autolab.


There is no textbook. Students are expected to read and comprehend ~1 paper per week.


  • Programming assignments: 40%
  • Participation: 10%
  • Other homework: 15%
  • Midterm: 15%
  • Final Exam: 20%

Note that attendance is required.

You are allowed 3 “grace” days during the semester. They can be used on any homework or project other than Projects 5 (concert) and Project 6 (last day of classes) to turn in a project late without penalty. You cannot spend a fraction of a grace day; lateness rounds up. You cannot selectively apply grace days to optimize your grade; they are used immediately when any assignment is late. After grace days are exhausted , a penalty of 10% per day will be applied. Late group projects will be charged one grace day per person per day.

You should not need 3 grace days. If there is a crisis in your life, please see your academic advisor. We will be happy to work with you and your advisor if there are exceptional circumstances.


As research on learning shows, unexpected noises and movement automatically divert and capture people’s attention, which means you are affecting everyone’s learning experience if your cell phone, pager, laptop, etc. makes noise or is visually distracting during class. For this reason, I allow you to take notes on your laptop, but you must turn the sound off so that you do not disrupt other students’ learning. If you are doing anything other than taking notes or class-related work on your laptop, please sit in the back row so that other students are not distracted by your screen.


Classroom activities may be taped or recorded by a student for the personal, educational use of that student or for all students presently enrolled in the class only, and may not be further copied, distributed, published or otherwise used for any other purpose without the express written consent of Roger B. Dannenberg. All students are advised that classroom activities may be taped by students for this purpose.


Policy on Academic Integrity is in effect for all courses at Carnegie Mellon including this one. Unless otherwise stated in writing in the assignment description (for homework, project, exam , or other) collaboration is limited to:

  • Discussion of concepts and algorithms,
  • Discussion of language and coding details. For example, explaining how to pass a function as a parameter and call it is OK.

Examples of collaboration that is not allowed include the following (this is not an exhaustive list):

  • Showing code for a programming project to a classmate,
  • Reading code for a programming project from another classmate,
  • Reading code solutions from a previous semester of this course,
  • Providing or copying answers for homework (you can discuss and explain what the question is asking and the conceptual knowledge required to answer the question, but you may not share numerical answers or text that is turned in).