Music and Audio Computing I


Course Outline for Fall 2002

Note: No class on September 20. Extra class on December 6.

Final Exam: Tuesday, December 17, 9:00am UCL

09/06 Review of MIDI and Introduction to Max

Assignment #1: Build a simple homepage
Reading assignment

09/13 Max: Basics Assignment #2: Basic Max patches
Reading assignment
09/20 No class  
09/27 Math, decisions, arguments, MIDI Assignment #3
10/04 Storage, communication, subpatches (Max patches) Assignment #4
10/11 Time management (Max patches) Assignment #5
10/18 Mid-term exam  
10/25 Sequencing (Max patches) Assignment #6
11/01 Mid-term exam review, if, expr, zl No new assignment. Deadline for Assignment #6 extended.
11/08 Standard MIDI File Format, detonate Assignment #7
11/15 Timeline, Graphics  
11/22 Scripting, Collectives Assignment #8
11/29 External control  
12/06 Advanced topics  



Assignment #8 (Due Dec. 15 extended to Dec. 17) Double points

Create a virtual MIDI channel mixer/recorder

  • Automatically generated, at least the mixeer section
  • User definable number of channels (1-16).
  • Use pictslider and pictctrl
  • Master Play and Record buttons
  • Record and Mute button on each channel
  • Recording light
  • Recall slider / mute postitions (automated faders)
  • Bonus points: extra features, e.g.: selectable channel number
  • NOTE: During overdubbing, assume that the user needs to playback the entire piece until the end to preserve the previous session. To aviod accidental erasure you may want to make the stop button inactive unless the user chooses an option switch that will allow to stop in the middle.
(An example)
Assignment #7 (Due Nov. 15)
  • Repeat the second question in Assignment #6 using detonate.
  • Write MIDI file analyser. Should print out statistics of any MIDI file (ignore track 10 when appropriate, e.g. pop songs):
    • number and range (min and max) of notes
    • average length of notes
    • range and average of dynamics, graph (table)
    • pitch-class distribution, graph (table)

Assignment #6 (Due Nov. 1) Extended to Nov. 6
  • Using mtr create a patch to record a Bach chorale and record a phrase of a chorale. Create 5 tracks and use one for click track.
  • Write (or borrow) a short melody with an accompaniment (e.g. quarter note against 16th notes).
    • play it with follow
    • make sure it follows musically with tempo change
    • please provide me with an easy way to test this (e.g. two samples with different tempo variations). We'll play them in class.

Assignment #5 (Due Oct. 25th)
  • Without using clip, write an external patcher (tondre) that emulate clip for integers. It should take arguments. It doesn't have to understand the "set" message.
  • Without using minimum, write an external patcher (minoflist) that returns the smallest number in the incoming list. (next time: no Trough, no if; list of floats)
  • Write an external patcher prime that is similar to Tim Place's prime (prime.hqx, Use sqrt for efficiency.

Assignment #4 (Due Oct. 11th)
  • Do Tutorial 29
  • Use the table object to write a monophonic MIDI sequencer in Max

Assignment #3 (Due Oct. 4th)

Create the following in Max:

  1. MIDI echo. Repeat the input note three times with decreasing velocity, the delay between the notes should be variable.
  2. MIDI arpeggiator. Arpeggiate a bass note (notes below middle C) until the next bass note is hit. Note above middle C should play normally.There should be a stop button. Make at least three different chord types (major, minor, dominant 7th, etc.), which should be user selectable.
  3. Random pentatonic melody generator. It should have three-octave range but without melodic leaps greater than an octave. Three differnent note lengths should be produced where shorter notes are more frequent than longer notes.

Reading assignment:

  • Winkler, pp. 63--70.

Assignment #2 (Due Sep. 28th)

  1. Convert age in years to number of days ignore leap years
  2. Convert age in years to number of days take into account leap years.
    “The calendar year is 365 days long, unless the year Is exactly divisible by 4, in which case an extra day is added to February to make the year 366 days long. If the year is the last year of a century, e.g. 1800, 1900, 2000, then it is only a leap year if it is exactly divisible by 400. Therefore, 1900 wasn't a leap year but 2000 was.”
  3. Display numbers continually from 0 to 1000. Should have start/pause button and a stop button (hint: use select and counter).

Reading assignment:

  • Winkler, pp. 41--62.

Assignment #1 (Due Sep. 24th)

Build a simple homepage on

  • Basic personal info
  • Links to your classes
  • Place to post your assignments
  1. From your home directory, create a subdirectory called: public_html (mkdir public_html)
  2. Create an html file ans save as index.html (use pico)

Reading assignment:

  • Loy, G. 1985. Musicians make a standard: The MIDI phenomenon. Computer Music Journal 9 (4): 8--26.
  • Moore, F. R. 1988. The dysfunctions of MIDI. Computer Music Journal 12(1): 19--28.


Created: 2002.09.05 Modified: Ichiro Fujinaga
McGill Crest