Music Technology

ASSIGNMENTS
Winter 2011


Assignments for the upcoming class session are posted below.

For Monday March 14:

Final project presentations/performances will be held Monday March 14 3:30-5:30 pm in the REALab (MM 216).

Turn your completed project into the EEE DropBox called "Final Project". Your project should include the software you wrote (with ample commentary sufficient for someone else to understand how your program works), any accompanying external objects and media files necessary for the program to work properly, any score or design notations you wrote for the realization of the performance of your piece, and any other text that will help explain the aesthetic goals and the technical execution of your project.

For Thursday March 10:

Come to class with questions about your final project.

For Tuesday March 8:

The topic of this class will be how to interface Max with other applications and with external devices.

Read the Max documentation on "Using Max with Other Applications".

Read the Max documentation on "Using ReWire in Max/MSP".

For examples of networking via UDP to send messages, and via TCP to send Jitter matrices, see Example 40 and Example 41 from the 2009 class.

If you're interested in sending messages to Max wirelessly from a mobile device such as iPhone, iPod Touch, iPad, or Android-based smart phone or tablet, you should read about TouchOSC. You can also read more about the OSC communication protocol that is used by TouchOSC, and you can download Max objects for managing OSC messages as part of the package of useful Max objects distributed freely by CNMAT at UC Berkeley.

If you are interested in realtime networked audio performance, you should read about JackTrip. To learn more about how JackTrip really works, you can read "JackTrip: Under the Hood of an Engine for Network Audio" (.pdf).

For Thursday March 3:

Read "Strategies for Continuous Pitch and Amplitude Tracking in Realtime Interactive Improvisation Software" (.pdf format).

Listen to (and read the score for) Mannam (Encounter) for daegeum (Korean bamboo flute) and computer.

If you're interested in the aesthetic context of this piece, read "Cultural 'Content' in Korean Music Made with Computers" (.pdf format).

For Tuesday March 1:

Study, and try out the accompanying patches for, MSP Tutorials 27: Delay Lines, 28: Delay Lines with Feedback, 29: Flanging, 30: Chorus, and 31: Comb Filter.

Here are some additional examples, from past classes: Delay-based effects, Multi-tap audio delay with feedback, Flanging, and Chorusing.

Here is an example of how to change delay times with no audible click or Doppler shift, by Cross-fading between two different delay times.

There are many delay-based effects used for video processing. Just to create a delay buffer for video frames, you can use the jit.matrixset object. Here is a demonstration of how to make A delay buffer for Jitter matrices.

Choose a use of audio delay that intrigues you, and write a simple program that employs delay to create an interesting sonic effect. Place your program (and any required media files) in the EEE DropBox called "Wk. 9 - audio delay".

For Thursday February 24:

Much as you did for the midterm project, write a proposal for your final programming/artistic project, and post it on the MessageBoard. Your final programming project will be due in final exam week, at a precise date to be determined.

The final project should entail realtime human-computer interaction, and should include one or more of the following: algorithmic composition of music or visual imagery, interactive control of digital audio synthesis or sample playback, realtime audio signal processing, interactive control of digital video playback and processing, animation and/or processing of 2D or 3D visual images, use of alternative controllers as musical instruments, computerized control of external devices, computer-controlled lighting, performance involving interaction between networked computers, and intermedia data mapping.

Your final project may be based on your midterm project in some way, but must a) make substantive additions and/or improvements to the midterm project, and b) be a more finished piece of music, sound art, or visual art. You should focus not on complexity of programming design, but on designing something that you're pleased with as an artistic piece, involving human-computer interactivity. Thus, you should spend some time thinking about and developing your artistic goal, every bit as much as (if not more than) planning your program development.

Your written proposal should include a one-paragraph abstract explaining what the project is and what it's about, a paragraph describing the conceptual/artistic basis (the reason why you are doing the project) and what you hope the finished work will be (possibly including what the finished program will do), and a description of your plan of action, ideally including a timeline describing the steps you plan to take to achieve the project by finals week.

In preparation for Thursday's class, read section '2.1. Emulated phase vocoding in the time domain' in the article "Programming New Realtime DSP Possibilities with MSP" and listen to the composition Insta-pene-playtion. Make some observations about the type of audio effects you think you hear: time expansion/contraction versus simple speed change, echo/delay versus progressive windowing, filtering effects due to interference, etc. Also, make some observations about the musical materials and the formal construction; to the extent that you think it works as a musical composition, why do you think it works?

For Tuesday February 22:

Read the article on the Algorithmic Composition blog titled "Tempo-relative timing". Read the articles in the Max documentation about Specifying Time Values, especially the articles regarding Time Value Syntax and Objects that Support Time Values. There are several examples online of how to implement tempo-relative timing in Max. Study Examples 42 through 48 from the 2010 IAP class. Think about how tempo-relative timing might be useful in your own projects. To test your understanding of the transport in Max, write a simple program that performs some timed action that is synchronized to the transport's beat clock.

For Thursday February 17:

Deposit your completed midterm project in the EEE DropBox called "Midterm Project". Your project should include the software (well commented so that a reader of your program can easily understand how it works!), any accompanying media files that are essential to its operation, and a prose description/explanation of how the software works and what it is designed to accomplish (i.e., any explanation that will help the reader understand and evaluate the program).

Prepare to give a very brief (10-minute) presentation of your project. This might (probably will) include a performance in which you demonstrate the musical/visual/interactive/aesthetic use of what you have designed. Ten minutes is very little time, so you should rehearse your presentation to make sure it can be effective in that amount of time.

For Tuesday February 15:

Continue working on your midterm project. Extract from your work one simple lesson you have learned or technique that you have discovered as you've worked on your project. Make a mini-tutorial teaching that thing, including an example patch and some explanatory text (comparable to one of the annotated examples posted on the Examples page), and post it on the MessageBoard by the end of Sunday February 13.

Feel free also to post on the MessageBoard any problems, or questions, or work in progress, relating to your midterm project. Come to class prepared to ask questions that will help you resolve any problems you might be having in completing your project the way you want.

For Thursday February 10:

Study MSP Tutorial 22 on panning.

For Tuesday February 8:

The topic of Tuesday's class is "Encapsulation": constructing a program from individual modules, each of which performs a specific task that is part of a larger structure. You can write a very small simple program, test it to be sure it works, then use it reliably inside other programs.

In preparation for class, take a look at the following readings. Don't worry if you don't understand every aspect of these articles, but do your best, and come to class with questions.

Start by reading the article on Encapsulation (.pdf) extracted from the Max 4 manual. (The objects in the graphic examples in the article will look strange, because Max 4 had a very different look, but the examples are still valid.)

Then read the page on Creating Subpatchers in the Max 5 documentation.

Next, open and study the help file for the patcher object: Applications/Max5/Cycling '74/max-help/patcher.maxhelp.

Next, read the page on Abstractions in the Max 5 documentation.

Next, open and study the help file for the inlet object -- Applications/Max5/Cycling '74/max-help/inlet.maxhelp -- and the outlet object -- Applications/Max5/Cycling '74/max-help/outlet.maxhelp.

Then read the article on Arguments (.pdf) extracted from the Max 4 manual.

Then open and study the help file for the patcherargs object -- Applications/Max5/Cycling '74/max-help/patcherargs.maxhelp.

Finally, take a look at the example abstraction called lmap, and notice how it uses inlet, outlet, and patcherargs.

For Thursday February 3:

Write a proposal for your midterm programming project, and post it on the MessageBoard. Your midterm programming project will be due Thursday February 17.

The midterm program should entail realtime human-computer interaction, and should include one or more of the following: algorithmic composition of music or visual imagery, interactive control of digital audio synthesis or sample playback, realtime audio signal processing, interactive control of digital video playback and processing, animation and/or processing of 2D or 3D visual images, use of alternative controllers as musical instruments, computerized control of external devices, computer-controlled lighting, performance involving interaction between networked computers, and intermedia data mapping.

Your written proposal should include a one-paragraph abstract explaining what the project is (what the finished program will do), a paragraph describing the conceptual/artistic basis (the reason why you are doing the project), and a description of your plan of action and goals, including a timeline describing the steps you plan to take to achieve the project by February 17. Your proposal may include diagrams, flow charts, and examples of partial or preliminary programs.

You won't be restrictively obliged to stick to this proposal as your work develops, but making and verbally expressing your plans with as much detail as possible is a vital step in working effectively on this programming project. Feel free to post rough ideas and preliminary thoughts on the MessageBoard for feedback from others before you post your finished project proposal.

For Tuesday February 1:

Read -- and study the accompanying programs for -- the blog chapters titled Randomness and Randomness and noise. To see ways that the range of random numbers can be managed for musical effect, read the blog chapters titled Limiting the range of random choices and Moving range of random choices. To learn about probabilistic decision making, study the blog chapters A simple probabilistic decision and Probability distribution.

By midnight on the evening of Sunday January 23, post on the MessageBoard at least one useful thing you learned about Max programming this week from your own independent study and practice.

For Thursday January 27:

In the algorithmic composition blog, read the two chapters titled Linear change and Fading by means of interpolation.

Using the examples in those blog chapters and the examples shown in class as a starting point for ideas, you can probably think of ways in which range mapping and interpolation between values can be applied in the programs you're currently working on. Think about how those two concepts are applicable to composing (or video processing, or whatever you're most interested in), and see if you can write a simple program that puts one of those techniques to use. For additional ideas, you can also take a look at examples 9, 10, 11, and 12 from last year's class.

For Tuesday January 25:

Write a (well-commented!) patch that you think does something interesting with jit.qt.movie. You might particularly want to try using the computer keyboard (or a MIDI controller if you have one available) to control your patch, and/or you might want to use some kind of automated process (say, with metro, counter, etc.) to control the jit.qt.movie object automatically. Place your finished patch (and if it requires particular video files, include those with it in a compressed .zip archive) in the EEE DropBox called "jit.qt.movie" by noon on Tuesday January 25.

For more on jit.qt.movie, its most important attributes and messages, and some ideas of the kind of things you can do with it, see also the examples from some previous classes. There is at least one relevant example from 2010, 2009, 2007, 2006, and 2004.

As every week, by midnight on the evening of Sunday January 23, 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.)

For Thursday January 20:

Read the chapter of the Jitter documentation titled "What is a Matrix?". Read also the chapter titled "What are Attributes?".

Study the first Jitter Tutorial chapter, titled "Playing A QuickTime Movie" and try the accompanying patch. Study also the example similar to the one made in class demonstrating the basics of the jit.qt.movie object. A look at the jit.qt.movie help file will show you how very many messages and attributes that object has. Some are arcane and might not be very useful to you, but some are pretty essential, so look at them all and try to get some idea of the possibilities the object makes available to you. Most importantly, study the manual page for jit.qt.movie, and in a Max patch of your own try out a few of the messages and attributes you read about.

For Tuesday January 18:

As every week, by midnight on the evening of Sunday January 16, 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.)

In the algorithmic composition blog, read the chapters titled Timed counting, Counting through a List, and Analysis of Some Patterns. (Read other chapters, too, if you're so inspired, of course.)

Write a program that experiments with some aspect of MIDI, such as:

By class time on Tuesday, deposit your program in the EEE DropBox called "Assignment 2 - MIDI".

For Thursday January 13:

Study "MSP Tutorial 2" regarding linear interpolation for control of audio amplitude. (You can read it online, but to try out the example patch you can also read it by choosing MSP Tutorials from the Help menu in Max, and clicking on the link there that says "Open the tutorial.") There are several other articles and examples (listed in the next paragraph) that will help you understand linear interpolation, how to control audio amplitude, why and when one should use the decibel scale instead of a straight linear scale, and how the line~ object works. Read as many of these as you can, and as many as you need to in order to have a thorough understanding of how to control audio amplitude in MSP.

Example 4 shows the use of the number~ object to smooth out transitions in audio signals. Example 5 shows a very similar technique using the line~ object for fade-in and fade-out. (You can view those two examples in Presentation mode to see an example of a maximally simple interface presented to the user.) You can find still more demonstrations in Fading by means of interpolation" in my algorithmic composition blog. (N.B. That article also uses an object called line, which is similar to line~ but interpolates numbers in Max messages rather than in a MSP signal. You can read more about those two objects in their help files to help you understand their differences.)

In Thursday's class we will discuss the use of MIDI in Max. In preparation for that discussion, read the following two Wikipedia pages about MIDI: MIDI (from the beginning, through the first paragraph of the section on File Formats) and MIDI 1.0 (the section on Message Format), and study the following three Max Tutorials on MIDI: Basics, Note Management, and Parsing.

For Tuesday January 11:

By midnight on the evening of Sunday January 9, 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.

Read chapters 1 and 2 of the Apple Macintosh Human Interface Guidelines, available online in PDF format and 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. www.freesound.org) 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.

For Thursday January 6:

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, the Sound Studio, or the Gassmann Studio for your work outside of class.

If you have not used Max before, begin studying the instructional materials provided in the online documentation of the Max 5 application. Start by watching the Tutorial Zero video, then read at least the first three of the Max 5 Tutorials.

To learn about programming audio in Max, read MSP: How Digital Audio Works, and MSP: How MSP Works. You should read these documents even if you already have experience with Max!

Come to class with questions about the readings! Learning to program in Max is a cumulative educational process, in which each step relies on understandings gained in the previous step, so it's important to ask questions and clarify any ambiguities along the way in order to establish a solid knowledge base.


This page was last modified March 1, 2011.
Christopher Dobrian, dobrian@uci.edu