Project 1

Project 1: Data-driven Performance Piece

A data-driven instrument is a system comprising three parts: an external hardware device that allows for the encoding of human gesture as data, software that maps these data to musical parameters, and a sound-synthesis engine that renders sound as a direct result of human movement.

In this project you will create your own data-driven instrument, develop a short composition, and perform it. The hardware device can be one of the ones mentioned below or agreed upon with your instructor.

We can use all sorts of external hardware to control sound generation in Max. There are three main aspects of this endeavor:

  1. the mechanics of connecting a device and accessing its data in real time,
  2. the musical application of the data — how we map the data to the parameters that control sound generation, and
  3. the performance gestures you use to interact with the hardware device.

An unusual aspect of controlling sound using devices that are not recognizable musical instruments is that there is no fixed association between actions taken on a device and the sound produced by them. The freedom this allows can be liberating, but we always want the actions taken on the device to be musically convincing.


  • You will perform your piece, which should last 2-3 minutes.
  • Your piece can include improvisatory elements, but you must plan the basic sound ideas and continuity of the piece. The goal is to make some kind of musical statement.
  • You must practice your piece!
  • Lay out your patch clearly, and use comments to explain the basic ideas of your design.
  • Set up your patch to open in Presentation Mode, and arrange the objects you — as performer, not as programmer — need to see while performing. That will include any user interface objects, such as buttons and sliders, as well as labels for every object. Don’t assume that you are the only person that will perform your piece! Consult Part 5 of the Project 1 Max Tips to learn about Presentation Mode.
  • Make a video of your performance, using whatever means are at hand. We want to see you performing, not the Max screen. You will find that working on the video will help you refine your ideas about the piece and its performance.

    To record the video, you might be able to use a laptop webcam with a simple video recording application, such as QuickTime Player in macOS. Or you could use your phone, if you have some way to mount it securely.

    You might want to dump the sound generated by Max to disk while you perform, using Extras > Quickrecord. Then you can edit this together with the video in Adobe Premiere, iMovie, or another video editor. You would want to do this in the following scenarios.

    • Your video recorder cannot record computer audio in stereo, or at all, while recording from a webcam.
    • You record video using a phone but need to combine this with high-quality audio from the computer.

    We’re not expecting a high degree of polish from your video. Spend most of your time on the music, the patch, and your performance — not on your video.


  • You should consult the Project 1 Max Tips patches for guidance with interfacing Max and a hardware device, and for some additional Max objects that may prove useful.

    The first four parts show how to send data to Max from the various gaming controllers (such as the Logitech F310 gamepad, the Gametrak tether controller, the Wii Remote (Wiimote) controller), phone apps (such as TouchOSC and Syntien), and webcams. Not all of these devices will work for every person, but hopefully you will find one that does.

    Even if a particular method won’t work for you, please read the patch about it, so that you understand the basic ideas and any Max objects introduced.

    You may find that you can work on your project and performance only when you’re in the studio, as we may not be able to check out hardware to you for this project.

    We prefer not to use standard keyboard-oriented MIDI controllers for this assignment. We do have a few grid controllers (arrays of buttons that generate MIDI note numbers), and you are welcome to try those. You simply use the notein object to receive notes from a grid controller. It’s possible to send MIDI messages to the grid controller to change its pad lights, which you might enjoy.

  • To get external hardware working with Max, do these things.
    1. Connect to the device, and make sure Max is receiving data. This is fairly straightforward with MIDI but can be challenging with other devices.

      If you have trouble getting a device to work, please let your instructor know right away.

    2. Study the Max Tips patches for this week, and set up your Max code to recognize whatever data your hardware device is emitting.
    3. Start with something simple, such as playing a sound file in response to a button press or (less simple) a trigger derived from continuous data.
    4. Decide whether you want to control the duration of a sound in real time, so that your action stops, as well as starts, playback. (This is easy for HID buttons that send 1 when pressed and 0 when released.) Or you can treat the button press as a trigger for a fixed duration, and ignore the button release value. A fixed duration can be simply the full length of the sound file, a selected duration within a playlist~ waveform display, or the time difference between the playback start time and a duration given as an argument to a delay object.
    5. When using continuous controls available on your chosen device, map the input range to your desired output range using scale.
  • During the piece, you may want to change the mapping of your movements to synthesis and processing parameters, as well as change the sound world you create. Keep this in mind when choosing hardware to perform your piece: it should allow you to do something that can be read as a button press that changes the state of the patch.

    The easiest way to change sound worlds is to store each of these in presets and then switch them in response to a real or simulated button press.

    At the same time, you may wish to change the routing of data from one parameter to another. Study again Part 4 of the Exercise 6 Max Tips for advice about doing this using the gate object. To store the routing in a preset, use a number box to hold the gate outlet number. The preset object will store that number box value.

  • There are other potentially useful bits of Max code in the Project 1 Max Tips folder.


  • Be sure you satisfied the criteria listed above.
  • Submit your Max patch and video in Canvas. If the video is larger than about 200 MB, store it somewhere in the cloud, and provide a link here. Please be sure that the video file is readable without requiring a login!
  • Submit a short description of your project: what you’re trying to achieve musically and how you want an audience to perceive your control of the sound. Plus anything else you think is relevant to appreciating your work.

Grading Criteria

The project patch and your performance together receive a single letter grade.