Wright, Matthew matt@cnmat.berkeley.edu
Khoury, Sami khoury@cnmat.berkeley.edu
Wang, Raymond raywang@cnmat.berkeley.edu
Zicarelli, David davidz@cycling74.com
Center for New Music and Audio Technologies
1750 Arch St.
Berkeley CA
94709 USA
(tel) (510) 643-9990
(fax) (510) 642-7918
Submission for long paper
Title: Supporting the Sound Description Interchange Format in the Max/MSP Environment
Keywords: SDIF, spectral modeling, sound description, Max/MSP, MSP
Content Area: Audio Analysis and Resynthesis, Audio Signal Processing,
Music Data Structures and Representations, Realtime Systems
Presentation resources: PPC Mac with projection


Abstract (594 words):

The Sound Description Interchange Format ("SDIF") is an extensible, general-purpose framework for representing high-level sound descriptions such as sum-of-sinusoids, noise bands, time-domain samples, and formants, and is used in many interesting sound analysis and synthesis applications. SDIF data consists of time-tagged "frames," each containing one or more 2D "matrices". For example, in an SDIF file representing additive synthesis data, the matrix rows represent individual sinusoids and the columns represent parameters such as frequency, amplitude, and phase.

Because of Max/MSP's many attractive features for developing real-time computer music applications, it makes a fine environment for developing applications that manipulate SDIF data. These features include active support and development, a large library of primitive computational objects, and a rich history and repertoire. Unfortunately, Max/MSP's limited language of data structures does not support the structure required by SDIF. Although it is straightforward to extend Max/MSP with an object to read SDIF, there is no Max/MSP data type that could be used to output SDIF data to the rest of a Max/MSP application.

We circumvent these problems with a novel technique to manipulate SDIF data within Max/MSP. We have created an object called "SDIF-buffer" that represents a collection of SDIF data in memory, analogous to MSP's "buffer~" object that represents audio samples in memory. This allows SDIF data to be represented with C data structures. Max/MSP has objects that provide various control structures to read data from a "buffer~" and output signals or events usable by other Max/MSP objects. Similarly, we have created a variety of "SDIF selector" objects that select a piece of SDIF data from an SDIF-buffer and shoehorn it into a standard Max/MSP data type.

The simplest SDIF selector outputs the main matrix from the SDIF frame whose time tag is closest to a given input time. Arguments specify which columns should be output and whether each row should appear as an individual list or all the rows should be concatenated into a single list.

More sophisticated SDIF selectors hide the discrete time sampling of SDIF frames, using interpolation along the time axis to synthesize SDIF data. This provides the abstraction of continuous time, with a virtual SDIF frame corresponding to any point along the time axis. We provide linear and a variety of polynomial interpolators.

This abstraction of continuously-sampled SDIF data gives rise to sophisticated ways of moving through the time axis of an SDIF-buffer. We introduce the notion of a "time machine", a control structure for controlling position in an SDIF time axis in real time, and demonstrate time machines with musically useful features.

"SDIF mutator" objects have been created that can manipulate data in an SDIF-buffer in response to Max messages. This allows us to write real-time sound analysis software to generate an SDIF model of an audio signal.

We implement control structures such as transposition, filtering, and inharmonicity as normal Max/MSP patches that mutate a "working" SDIF-buffer; these are "cascaded" when they share the same SDIF-buffer. These control structures communicate via symbolic references to SDIF-buffers represented as normal Max messages.

This system also supports network streaming of SDIF data. As research continues towards more efficient and musically interesting streaming protocols, Max/MSP interfaces will be implemented in C as SDIF mutators that access a given SDIF buffer via a struct definition in the exposed SDIF-buffer header file. One promising approach is to begin transmission with a low-resolution representation and then fill it in with increasing detail. Time machines communicate with streaming interfaces via Max messages to request or predict ranges of time that will need to be available in the near future.