21M.385 | Fall 2016 | Undergraduate

Interactive Music Systems


Course Meeting Times

Lectures: 2 sessions / week, 1.5 hours / session


21M.301 Harmony and Counterpoint I, 6.01 Introduction to EECS (or python proficiency), or permission from the instructor. 6.005 Software Construction is recommended.

Course Description

Interactive Music Systems is a hands-on programming and design course that explores audio synthesis, musical structure, HCI (human computer interaction), and visual presentation as the ingredients for the creation of engaging real-time interactive musical experiences.

These experiences allow users to connect with music more deeply than through passive listening. The most successful ones (such as Harmonix’s Guitar Hero, Rock Band, Fantasia: Music Evolved) give users intuitive control, greater musical insight, and a deeper emotional response to the musical experience.

Students will learn about the principles, design considerations, and aesthetic qualities of interactive music systems by exploring the following topics:

  • Music perception and audio synthesis
  • Dynamic multi-track audio mixing and looping
  • Programmatic MIDI and event sequencing
  • Generative composition systems including rhythmic and melodic synthesis
  • Exploration of non-standard control devices such as game controllers, motion sensors (Kinect, Leap Motion), and pad controllers.
  • Analysis and application of design elements in music games.
  • Building graphics for UI, music visualization, and aesthetic cohesion.

Class Structure and Assignments

Lectures occur on Mondays and Wednesdays and consist of both conceptual presentation and “live coding” to demonstrate how concepts are put into practice. We will use the python programming language in conjunction with the Kivy application framework to create interactive music systems. On Wednesdays, you will do an in-class coding exercise related to the week’s material, so please bring your laptop.

Assignments are released on Monday and are due the following week on Tuesday at 8:00am. You may work on assignments alone or with a partner from class. However, if you do work together, you should accompany your pset submission with a paragraph describing how you worked together. 

All psets (except pset6, in which you play a game!) are coding assignments that have a creative component in addition to an engineering component. On the Wednesday due date, 2-3 students will volunteer to demonstrate the creative parts of their solution to class. Students may present multiple times, but each student is required to present at least once during the semester.

Note that each assignment builds on the material of the previous assignment.


Throughout the term, each student will discover, analyze, and present in class an interesting new media work related to music technology, interactive music, generative music, or music visualization. The intent is for you to deepen your knowledge of interactive music by exploring what other practitioners in the field have done. There are many individuals and small teams making interesting technology-based art, and there are good blog sites that can get you started in your search (in addition to your own web searches).

Final Project

This class has a final project lasting the final 5 weeks of the semester. Final projects are done in teams of two or three students per team. During this time, teams will meet individually with the instructor in lieu of regular lectures. Each team is required to make four presentations to the class:

  • A Project proposal at the beginning of the final project period
  • Two working (functional, non-crashing) interim milestones
  • A final project presentation during the final day of the course (which will be video recorded). There will also be an opportunity to present final projects in a public demo session. 

Software / Hardware

Class assignments and final projects will be constructed using the python framework Kivy. You will also need a few freely available software packages. See the Tools section for the software requirements.

For some assignments, we will use special hardware input devices (like the Microsoft Kinect sensor). All hardware required for assignments will be made available to residential students as a loan. Hardware for final projects can be borrowed or purchased by students, depending on the nature of the project and the desired hardware.

Attendance / Lecture Notes

There is no required text and relatively little required reading. All topics are conveyed during Lecture. Lecture notes are relatively sparse. Class attendance is mandatory and attendance is taken at the start of each class. 


Activities Percentages
Class attendance, including in-class presentations 20%
Assignments 50%
Final Project 30%

Late assignments are penalized 10% per day that they are late, with a maximum penalty of 50%. Every student is allowed one assignment extension, which must be coordinated ahead of time with the instructor.

There is no final exam.

Academic Integrity and Collaboration

Read MIT’s Academic Integrity Policy. It applies here. In particular, we will be coding for this class, so read the coding section.

If working as a team, each team member should contribute an equal share of the work for the assignment. Every collaborative assignment submission must include a paragraph describing the nature of the collaboration – who did what, and how the collaboration worked.

You may look online for python implementation tips and ideas when doing assignments. Stackoverflow is a great resource, for example. Cite the source as a code comment. If you do copy, you should limit yourself to a few lines of code. Do not copy or use whole modules or large functions for assignments.

You are allowed to copy / use / modify code provided to you by the instructor, or code that you wrote for previous assignments. In fact, many assignments assume you have access to working code from the previous assignments.

For the Final project, your design may call for copying larger amounts of code than is permitted for assignments. The specific nature of external code usage for the final project must be discussed with the Instructor.


The only permitted electronic device is your laptop. You may only use your laptop for taking notes and coding on material related to the class. Do not tweet, check email, Facebook, IM, browse web sites.

Attendance is mandatory. If you know you must miss a class due to illness or some other circumstance, please let the instructor know ahead of time.

If you do miss a class, it is your responsibility to find out what happened by first contacting your fellow classmates. Only after that, you can contact the instructor or TA for additional help.

Course Info

Learning Resource Types
Lecture Notes
Problem Sets
Presentation Assignments
Projects with Examples