Visual Programming

Visual Programming | Winter 2016

Professor: Cory Metcalf
Course: EDPX 3450/4450 Visual Programming
Class Times: Tuesdays & Thursdays 5:00PM - 7:50PM
Location: Sturm Hall, Room 434
Email: (correspondence Mon-Fri)
Office Hours: Tuesday 2-4PM, by appointment (e-mail confirmation required)
Office: Shwayder Art Building, room 227


The complete syllabus can be found here.

Course Schedule

*The course schedule is subject to change and may be updated reqularly. All students are responsible for checking the schedule reqularly to ensure they are aware of changes.

Basic Class Structure

Each class will begin with presentations of assigned materials and/or a brief quiz to review the concepts discussed during the previous session. Following the quiz/presentation will be an intensive lecture and follow-along patching session. After giving all assignments for the next session, the remainder of each class period will be used for hands on patching and one-on-one instruction.

T, Jan 5 - Class 1 - Getting Started - VIZZIE

  • Course Overview
  • Review of syllabus and policies
  • Introduction to Visual Programming with Max/MSP
  • Team Selection
  • Installing Max

  • VIZZIE - Using VIZZIE for quick development - viewing and processing video in real-time

    • The Max Interface
      • The patcher state - locked and unlocked
      • File Browser
      • VIZZIE modules and categories

    Homework - due at start of class #2
    Create a Vizzie patch using both live camera input and recorded video playback. The patch should contain at least 5 FX modules, multiple video layers (XFADR, 4MIXR, CHROMAKEYR and ALPHABLENDR for example) and switching elements (2ROUTR and/or 2SWITCHR).
    Save your patch as [yourlastname]-vizzie-exercise1.maxpat

Th, Jan 7 - Class 2 - From VIZZIE to Standard Max

  • Quiz on Max/Vizzie patching
  • Extending VIZZIE with Controllers and Generators

Introduction to standard Max programming (from 20 Objects)

  • bang
  • number and flonum boxes
  • messages
  • The Max window (and print)
  • comments
  • loadbang and state saving in VIZZIE

    Homework - due at start of class #3
    Visual Performance patch (to be performed for class): Using the Vizzie modules, create a Max patch that you will perform (or allow to generate) for the class. Duration should be less than 3 minutes. The patch should be set up so all of the contents necessary to automatically run are set when opened. Try to use some Vizzie modules that we did not directly discuss in class.
    Save your patch as [yourlastname]-vizzie-exercise 2.maxpat

T, Jan 12 - Class 3 - Standard Max Part 2 - Nuts and Bolts

  • Performance Patch presentation
  • Quick Quiz
  • Order of Operations (see button section of 20Objects)
  • Basic math
  • Hot and Cold
  • Inspector
  • Finding out more – the Max help system

    Homework - due at start of class #4

  • Using the math objects we discussed in class, create a patch that does the following basic calculations: area of a rectangle, square, and circle and the hypotenuse of a right triangle. Dimensions can be fixed or variable. Label your work with comments.
    We often do a lot of math when we program, but more importantly, this will help us to integrate the concepts of hot and cold inlets and order of operations. *If you are unsure of the formulas, google them!

  • There is always more than one way to solve a programming proglem; see if you can find another object or objects using the max help system that would streamline this process. For example, if Hint: Use the Reference tab in the sidebar and check the "See Also" section for each math object you used above.

Th, Jan 14 - Class 4 - Standard Max 3 - Messages, Lists, and Timing

  • Quiz on Max/Vizzie patching
  • Lists
    • Packing and Unpacking
    • Lists as messages to objects - object appearance
  • Max Time – An Introduction
    • Metro, Toggle, Counter, bline
    • Fixed vs. relative
  • In-class patching

    Homework - Due at start of class #5

    1. Automation Create a patch that uses the timing and automation techniques we looked at in class to alter the appearance of your patcher over time. Use at least 5 different objects (i.e., 3 buttons and 2 comments) and 10 visual elements (i.e., font change and color on both comments, button and background color of all 3 butons).

    2. Standard Max - Button Art - Work in Progress due at start of class #5, Final Version due at start of class #6
      Using only standard Max programming (i.e., do not use Vizzie modules), create a simple artwork that uses buttons to create a "light show" that is interesting. Consider using delays, automating color changes, time based "events", sequences, etc. We will have time on Monday, class #5, to work on this in class.

T, Jan 19 - Class 5 - Integrating What We've Learned

  • Quiz on lists, messages, and timing
  • Automation patches due
  • Team selection and organizational meeting
  • Max interface - Presentation mode
  • In-class work on Button Art - Take advantage of class time to ask questions.

    Homework - Due at start of class #6

    • Finalized Button Art - presentation

    Looking ahead

    • The first team project will be due on Class #9 (2.4.16).
      Collaborate with your team members to create a mixed mode (Vizzie + Max) audio/video installation piece based on an art historical movement of your collective choice. Utilize everything learned up until this point. Presentation/viewing duration should be 10 minutes with 5 minutes of explanation (before or after) and 5 minutes of Q&A.
      Be prepared to describe each team member's contribution to the result.
      In order to receive a good grade on this assignment, you should begin working now.

Th, Jan 21 - Class 6 - MIDI: An Introduction

  • Button art presentations. Yay!
  • Background on MIDI standard
  • Making Sounds

    • Noteout
    • Makenote
    • Changing voices with MIDIformat
    • MIDI Devices
    • Random Numbers – Random, URN, Drunk
    • Scaling
    • Filtering repetitions and defining boundaries
    • see General MIDI

    Homework Due Class #7

    1. Using the MIDI objects we explored in class and your existing button art project, add sound to your light show.
    2. Using MIDI objects and randomization objects, create an "interesting" generative musical composition. Duration can be fixed or indeterminate. Try to only use MIDI values between 30 and 95. Consider multiple voices, variations in intensity and note duration, and overall arc.

T, Jan 26

- Team meetings

Th, Jan 28 - Class 7

  • Buttons with sounds - quick presentations
  • Generative music presentations

  • patching without cables
    • locally with send and receive
    • networked with udpsend and udpreceive
  • Routing data - gates, switches and routers
  • Selecting by input - funnel, route, select, spray, typeroute

T, Feb 2 - Class 8

  • Using MIDI controllers
    • ctlin, notein, midiin, xbendin
  • In class work on Team Project One

Th, Feb 4 - Class 9 - Scripting Names and State Saving with pattr

  • pattrstorage
  • autopattr
  • preset
  • interpolation

Homework Due Class #10

  • Team Project one

Homework Due Class #11

  • Using the MIDI objects we explored in class and the pattr system, create an algorithmic music piece with at least 5 distinct presets. Think about creating different tempos, instrument combinations, random ranges (from very confined to wildly random). Also try exploring interpolation between states.

T, Feb 9 - Class 10 -

  • Team Project One - Installation - Due

Th, Feb 11 - Class 11 - Introduction to MSP - Signals and Audio Generation

  • Intro to MSP
    • signals
    • sample rates
    • ~'s
  • Making Sounds
    • Waveforms and oscillators - cycle~, rect~, saw~, tri~, sig~
    • amplitude control - *~ and gain~
  • Making notes
    • mtof
    • ADSR (envelopes) with line~
    • function
  • Playing sound files
    • sfplay~
    • buffer~
    • groove~
  • Complex sounds - AM and FM

    Homework Due Class #12
    Using the MSP objects we explored in class (no MIDI), create a custom audio piece. Explore the use of samples, oscillators, envelopes, modulation, and noise within the same composition.
    You can also incorporate external input to add performative layers, such as keypresses, MIDI controllers, color tracking via Analyzer, etc.
    Duration should be between 2 and 3 minutes, unless you are create a non-durational generative piece.

T, Feb 16 - Class 12 - Audio Filtering

  • noise~
  • cross~
  • comb~
  • svf~
  • biquad~ and filtergraph~
  • meter~ for getting peak amplitude

    Homework Due Class #13
    Using only noise (noise~ and/or pink~) create a generative sound composition. Be sure to make extensive use of filters to create multiple pitches and timbres (qualities of sounds). Consider ambient washes, pitched notes, and percussive hits; automation of filter parameters over time can help you to create slow builds and dramatic shifts.

Th, Feb 18 - Class 13 - Audio Effects and Levels

  • Listen to noise compositions

  • Delaying signals

    • wet versus dry
    • tapin~ and tapout~
    • automating delay times
    • feedback in delay line
  • Levels

    • signal summing and optimal amplitudes
    • "unity" with the gain~ object
    • stereo perspective

    Homework Due Class #13
    Using the full vocabulary of MSP objects we have looked at so far, create a dynamic audio performance between 3 and 4 minutes in length, controlled by you in real time (so using either your keyboard and mouse or a MIDI controller). Be sure to use samples, generative sounds, filters and audio effects. Be prepared to perform at the start of class.

T, Feb 23 - Class 14 - Introducing Jitter (!)

  • MSP performances
  • The Jitter Matrix
    • planes, pixels, and data types
  • Working with Video in Jitter
    • jit.qt.grab/jit.grab
    • jit.matrix
    • qmetro vs. metro
    • jit.window
    • the jit_matrix message
    • jit.fpsgui
  • Attributes and "@"

    1 - Personal assignment - Due Class #15 Max in the World!
    Find a compelling performance or installation that utilitizes Max/MSP/Jitter and prepare a 5 minute presentation about the work to be shared with the class. Why is this piece compelling to you? How does it utilize Max? How does it extend your sense of the utility of Max?

    2 - Group Assignment
    Project 2 Proposal - Due Class #16
    Draft a proposal for the second project. We will discuss these on Monday and I want to be prepared to offer feedback. Provide an outline of the basic concept, presentation format, and required materials and new techniques.
    Performances will be between 12-15 minutes in total duration and will require active participation by all group members. All projects must include both visual and sonic elements.

Th, Feb 25 - Class 15 - Jitter Compositing

  • jit.xfade, jit.op, jit.chromakey, jit.lumakey, jit.alphablend
  • jit.unpack, jit.pack

    Homework - both due Class #16
    1 - Create a real-time video work that utilitizes your own original video content and at least 5 jitter objects for processing. Fixed length works should be between 2-3 minutes, generative works can be without fixed duration.

    2- Group Assignment
    Project 2 Proposal

T, Mar 1 - Class 16 - Jitter FX - Feedback and Delay

  • Feedback
    • basic feedback using jit.xfade
    • jit.slide
    • jit.rota
    • Also see jit.wake for an all-in-one feedback object
  • Audio to video, video to audio - analysis for control

    • jit.3m, jit.peek~, jit.poke~
    • meter~, snapshot~, peakamp~ (and scale~/scale)
  • Group Meetings

    Using MSP and Jitter create a patch that uses data from signals to manipulate images and data from images to manipulate sounds. Objects to remember are jit.3m, meter~, snapshot~, peakamp~ and, of course, scale and scale~.

Th, Mar 3 - Class 17

  • Intro to OpenGL
    • Basic GL manipulations and rendering

T, Mar 8 - Class 18

  • Team Project 2 - Performance - Due

Th, Mar 10 - Class 19

  • OpenGL
    • Matrix manipulation of GL objects

Final Friday, Mar 11, 6 - 7:50 PM

  • Individual Final Projects - Due.


Create a patch that examines an historical person, event or place of your choice. The patch should in some way demonstrate your personal response to your research on the topic. All patches must demonstrate high competency in programming with Max and must contain both image and sound. Final product can be a performable patch space, an installation, or a utility.

All media and patches must be delivered no later than March 13th at 11:59PM.