During the past several weeks I’ve been working with a New York-based interactive media artist named GH Hovagyam. I’ve been helping out GH with the programming for his latest installation, which he has been building at the Lower Manhattan Community Council artist studio in Governor’s Island.
The piece is titled Seesaw. It is an interactive installation that features a seesaw in a room next to two video projections that play clips from the movie “Two for the Seesaw”. People’s interactions with the seesaw control the video projections.
There will be an open studio weekend from this Friday through Sunday. If you are in New York stop by to check it out (I will probably be there on Friday only). I will make sure to capture some video to share here – it will actually be my first time playing on this seesaw.
Pure Data to the Rescue
I got involved in this project through Hans-Christoph Steiner, the instructor from my Introduction to Dataflow Audio Programming class at ITP. Hans referred GH to me, after I told him that I wanted to continue building my Puredata skills.
When I got started, GH had already build an initial prototype that worked for about 30 minutes at a time. My task was to create another version of this patch that would work without crashing for extended periods of time, and that was more streamlined. This task was easier said then done – especially considering that I had no previous experience using GEM (PD’s graphics engine).
GH chose to use Puredata because it is a powerful open source dataflow programming language. Though PD’s video engine is a bit less stable than Max/Jitter, it can be used without any concerns regarding licensing.
The Patch Architecture
I divided the application into a few core components. Some of these components were created as sub-patches, others were created as abstractions:
- Application controller (main patch): Launches the application window and starts the video. It also houses all of the abstractions and sub-patches listed below.
- Midi reader (sub-patch): Reads incoming MIDI messages and processes these messages to determine whether to turn or off video projection one and two.
- Clip selector (abstraction): Selects a new clip and outputs (using the send object) the path and file names for the new video and audio clips.
- Clip controller (abstraction): Loads and plays new clips based on messages from the clip selector and turns on and off video and based on messages from Midi reader.
Running the Patch
In order to get this patch running on your computer there are a few settings that you need customize first. Notice: If you don’t customize these settings the patch may crash your computer.
First, open the pd window_settings subpatch that is located in the Create & Destroy Video section of the main patch. In this patch, update the window dimension message that is highlighted in red.
Next, you need to update the path of the video and audio files and the file name database in the clip-selector patch. I recommend that you open this patch directly to make these changes. First update the path for video and audio clips. Make sure to append “%s.mov” to the end of the movie file path, and “%s.aif” to the end of the audio file path (as this is what makes sure the file names are inserted appropriately).
Last, update the database that is stored in the “coll” object. For the patch to work properly the video and audio clips need to share the same file names. Update the data in this file but make sure to keep to the proper format (“index number, path;”). To finish up, update the random object to make sure it is set to the number of items that exist in the database.

