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.