Interactive Arts Programming

Spring 2009

Assignments for the upcoming class session will be posted here.

For Thursday June 4:

Hand in your final programming/artistic project. This should be an interactive, computer-mediated, realtime "artistic experience" for a user or audience. An interactive artistic experience might include a computer-mediated music performance, a computer-mediated live multimedia performance, a computer-mediated art and/or sound installation, or a piece of software conceived for the user to have an interactive aesthetic experience.

By the end of the day, place into the "IAP Final Project" dropbox a .zip archive containing all of the program, media, and explanatory files necessary for someone to understand and run your program and replicate your artistic work. The program must be legible and comprehensible for someone else to read, must be well and thoroughly documented with comments, and must be thoroughly explained in a prose description. Any external objects, sound files, image files, videos, scripts, scores, etc. that are needed to run the piece must be included. Step-by-step instructions of how to run the program/piece successfully are highly recommended.

For Tuesday June 2:

Come to class prepared to ask focused questions about either programming issues you have encountered or artistic issues on which you'd like input from others, in relation to your work on your final project. If you would like a critique of the artistic aspect of your project prior to the Thursday deadline, be prepared to demonstrate your project.

For Thursday May 28:

Come to class prepared to ask focused questions about either programming issues you have encountered or artistic issues on which you'd like input from others, in relation to your work on your final project.

For Tuesday May 26:

Write a program that provides some (possibly very simple) interactive control over the editing or compositing of two Jitter matrices. Preferably the result will create some type of relationship between sound/music/gesture and visual result. For "interactive control" you could use any of the means we've explored so far: computer keyboard, mouse or trackpad, MIDI notes, other MIDI controllers, audio amplitude (e.g., with peakamp~), etc. In short, anything that comes from a human-produced input. For "editing or compositing" you might think of such things as switching from one video to another, leaping to a new location within a video (with a 'time' or 'frame' message), mixing two videos (with jit.xfade), drawing one image on top of another (e.g., with jit.lcd), mathematically compositing two images (with jit.op or jit.alphablend), etc. Make sure that you include enough commentary or instructions so that the user knows what to do to get the desired results.

For Thursday May 21:

There is no new assignment due on this date.

For Tuesday May 19:

Study Jitter Tutorials 8, 9, and 10 on mixing and compositing images in Jitter.

For Thursday May 14:

Listen to, and look at the score for, the piece "Mannam" for Korean flute and interactive computer system.

Read the article "Strategies for Continuous Pitch and Amplitude Tracking in Realtime Interactive Improvisation Software" (.pdf) to get a sense of some of the concepts and programming techniques used in that piece.

For Tuesday May 12:

Think carefully about what your aesthetic and artistic goals are for interactive arts programming made possible by Max. Post to the MessageBoard in as much detail as possible your plan for your final project, including what your aesthetic/artistic goal is, what your concept is for exploring (and, one hopes, reaching) that goal, and specifically what steps you intend follow as you proceed to program and present an artistic work (a performance or installation) of music or multimedia that involves realtime human-computer interaction.

For Thursday May 7:

Write a program that implements a delay-based audio effect, to be applied to pre-recorded sound and/or live sound input. The goal is to use delay to create an audio effect that is useful and/or pleasing, either as an "effects processing tool" or as an idiosyncratic artistic object. That is, it should either be written to provide an adjustable general-purpose tool, or to create a very particular unusual effect. Write sufficient commentary to explain what the program is meant to do, and provide whatever explanation and/or example is necessary to demonstrate it.

The delay-based effects you might consider using include simple delay (tapin~/tapout~), delay with feedback, multiple-tap delay, ping-pong delay, delay with alteration, flanging (LFO control of delay time with cycle~, phasor~, tri~ etc.), chorusing (low-frequency random control of delay time with rand~), comb filtering (comb~), and other sorts of filtering (reson~, lores~, biquad~, etc.). If you are having trouble imagining how such an effect should work, observe how similar effects are implemented in plug-in effects in programs like ProTools and in sound-processing software such as Reason and Live, and try to emulate one or more particular features of those programs.

For Tuesday May 5:

Turn in your midterm project in the DropBox. Your midterm project should consist of:
- A program that involves realtime control of audio, video, and/or music to achieve an artistic result
- Ample explanatory comments within the program
- Any media files necessary for the proper functioning of your program
- A prose description of what you are trying to achieve and how your program works.

For Thursday April 30:

Read "What is a Matrix?", and "What are Attributes?", and study as many Jitter Tutorials as you are able. Study Jitter Tutorial 1 at a minimum, you can probably skip Jitter Tutorials 2 and 3 for now, and proceed to 4, 5, and onward.

For Tuesday April 28:

Take a look at the thirteen examples posted from April 21 (examples 10 to 22) on the examples page. At least a few of those should teach you something you didn't already know, and hopefully will be applicable to something you intend to do for your midterm project.

Continue working on your midterm project, which will be due on Tuesday May 5. Post questions or interesting discoveries on the MessageBoard.

For Thursday April 23:

Attend the free concert by Abbie Conant Wednesday April 22, 8:00 pm in Winifred Smith Hall.

For Tuesday April 21:

Take a look at the document I've posted on the web that summarizes what we've covered in the first three weeks of this class. If there are topics about which you feel uncertain or insecure, ask questions about them. (The MessageBoard is a good place to pose questions to your classmates.) In addition to asking questions about them, of course you should study about them on your own by a) reviewing all past reading and programming assignments, b) studying relevant chapters/patches in the tutorials, c) studying the posted examples from class, and d) reading the help files and the reference manual.

Based on that list of covered topics, write a small program that does something you haven't done yet yourself. For example, if your programs so far have dealt only with triggering sound files, try doing something with MIDI; or if you haven't done anything visual with imovie or lcd, try that; or try reversing the tasks of assignment 3, such that you perform the triggering of events, and an automated process in Max (using metro and counter, or line, or line~, etc.) controls some aspect of the performance. In short, try doing one of the possibilities that you haven't yet tried. Post your assignment in the DropBox created for Assignment 4. Your Max patch should contain enough comments so that someone else can easily understand what the program does and how it works, and you might even want to include a short explanatory text file.

By midnight on the evening of Sunday April 19, post on the MessageBoard a discussion of something you have seen demonstrated or heard discussed in class, or something you have thought of yourself, that is an artistic area you think you'd like to explore in Max for your midterm project. In addition to saying what general topic area you're interested in, cite one or more specific things you think you'd like to try to accomplish with Max. Try to include what your own artistic goal is, what you think you can get interested in pursuing with Max, and what specific task(s) you think you will need to accomplish. (That might also give you an idea of what to do for programming assignment 4; you might choose to do something that gets you started toward your goal.)

By midnight on the evening of Sunday April 19, post on the MessageBoard at least one useful thing you learned about Max programming this week from your own independent study and practice. (The more the better.) Don't worry about whether the information is sophisticated enough or too sophisticated to be useful to others in the class; chances are it will be helpful to someone.

For Thursday April 16:

Study MSP Tutorial chapters 2, 9, and 10. Chapter 2 demonstrates linear interpolation with line~ to make smooth changes to audio signals. Chapter 9 demonstrates the use of a sinusoidal LFO to control amplitude for a tremolo effect. Chapter 10 demonstrates the use of a sinusoidal LFO to control frequency for a vibrato effect. If you want to read even more on control functions for audio, read the blog article on line segment control functions.

Optional experiments you might want to try, to test your understanding of the use of LFOs in Max: Can you use a sinusoidal LFO to control the rate of soundfile playback? Can you set up the mod wheel or a fader to control the width (amplitude) of a sinusoidal LFO that controls vibrato or tremolo? Much more challenging experiment: Can you use the sinusoidal LFO to add vibrato (of pitch) to an incoming audio signal?

For Tuesday April 14:

Carefully study the examples from the April 9 class session, especially examples 5 and 6. Take the time to understand each object, its reason for being there, and the precise effect of the patch by tracing in your mind what messages will pass through the patch cords.

If you want to read more about linear interpolation and linear mapping, see also Dobrian's blog chapters on linear change and fading by means of interpolation.

Write a program that a) has something that happens continually and automatically (a timed process with metro or a similar timing object), and b) allows you to control some aspect of that automated process continuously (with the mouse, a MIDI controller, etc.). For the first criterion, some examples would be: repeatedly playing a timed sequence of sound files, or playing a repeated series of MIDI notes, or (if you're feeling adventurous and want to experiment with the lcd or imovie object) drawing a series of colored lines or playing a timed sequence of videos. Things you decide to control yourself might be things like: volume, velocity, pitchbend, rate, etc. When accomplishing this task, try to make a sensible and intuitive mapping of the controller to the thing you're controlling, and, ideally, something that results in a potentially useful/pleasing aesthetic effect.

For Thursday April 9:

Study two chapters in Dobrian's algorithmic composition blog: the August 6, 2008 entry on Repetition at a steady rate and the August 18, 2008 entry on Timed counting.

Make two Max patches. The first patch should cause something to happen repeatedly at a given rate. This should pretty easy, because it's demonstrated clearly in the blog example on repetition. Make your patch trigger something different than in the example; it could be a MIDI note, or a sound file, or anything else you might think of such as displaying a picture or playing a video (these haven't been demonstrated in class, but if you want to figure out how to do them on your own, go right ahead). If you want to give yourself an additional small mathematical challenge, make your patch in such as way as to allow the user to specify the rate in "events per second" or "beats per minute" or some other terms that truly indicate a rate (some number per some duration) rather than a time interval in milliseconds. The second patch should count through a series of three or more different events at a given rate, such as playing three different sound cues in order or playing notes of a chromatic (or other) musical scale in MIDI.

For Tuesday April 7:

Read chapters 1 and 2 of the Apple Human Interface Guidelines, on reserve in the Arts Media Center. Pages 1-11 outline Apple's basic principles for good software. The remaining pages explain practical ways of implementing those principles, based on the original Macintosh interface.

Try to maintain a daily regimen of working through the online Tutorials. (You can access the Tutorials and all the other online documentation via the Help menu in Max.) If you are new to Max, begin with the Max tutorials. Open and try out the Max program associated with each chapter. Once you feel you have the hang of how Max works, and have encountered a modest number of Max objects, you should start reading the MSP tutorials, too. (Continue working on both sets of tutorial lessons in parallel.)

To learn about programming audio in Max, if you have not already done so, read MSP: Introduction, MSP: How Digital Audio Works, and MSP: How MSP Works. Then begin working through the MSP Tutorial chapters.

Try out the Ron Winter drum sampling program. Think about how the program works. Could you make a program in Max that works similarly? Try to build a Max patch that duplicates as much of the capability of that program as possible. Here are some hints of objects that you might need: dac~, sfplay~, key, select, message, fpic (or the Paste Picture command in the Edit menu), ubutton, comment, loadbang. You'll also need some sound files. Download them from the web (e.g. or borrow them from other programs or sources, or record them yourself. You don't need to use the same sounds as are used in the model program; feel free to create your own library of interesting sounds for this purpose. Note that the model program can play polyphonically (i.e., can play multiple simultaneous sounds); that's a moderately complicated thing to program successfully in Max, so don't feel obliged to try to implement that capability (unless, of course, you're an experienced Max programmer and want to take on the challenge). If you think of improvements or elaborations or new ideas to change or extend the program, that's fine, but make a basic imitation of the model program first. Be prepared to demonstrate your program in class.

By midnight on the evening of Sunday April 5, post on the MessageBoard at least one useful thing you learned about Max programming this week from your own independent study and practice. (The more the better.) Don't worry about whether the information is sophisticated enough to be useful to others in the class; chances are it will be.

For Thursday April 2:

Read Music Programming by Christopher Dobrian.

Make arrangements to come to class with a computer to work on Max. If you can bring your own laptop, download the Max software and all necessary documentation and tutorials to that computer. If you cannot bring a laptop computer, you can use one of the computers in the REALab during class time, and you can use the computers in the Arts Media Center and the Gassmann Studio for your work outside of class.

Begin studying the instructional materials provided in the online documentation of the Max application.

In previous versions of Max, prior to version 5, there was a different set of Max Tutorials that came with the program. In Max 5, those tutorials were replaced by a new set. That was necessary because Max 5 had so many changes that much of the information in the old tutorials and documentation was no longer true. However, some people think that the older set of tutorials was simpler and clearer for people who are just beginning with programming and Max. You can still find those old tutorials online. (Clicking on that link will immediately begin downloading a .zip file of the older documentation.)

These older tutorials will be suggested reading for the beginning of the class, so if you are just beginning with Max, you might want to begin by reading the chapter in the old documentation titled "Overview: The Max Application" in the document titled Max46Fundamentals.pdf. (Yes, some of the information is obsolete for Max 5, but the basics are the same.) Then go on to the actual tutorials in the document titled Max46Tutorial.pdf There are even more tutorials that come as part of Max 5, as well as tutorials specifically for MSP and Jitter (the audio and video programming parts), but those older tutorials are the simplest introduction (even if not always the most exciting).

To learn about programming audio in Max, read MSP: Introduction, MSP: How Digital Audio Works, and MSP: How MSP Works.

This page was last modified May 27, 2009.
Christopher Dobrian,