Research: Tools

MATLAB audio input MEX Plug-in for cross-platform multichannel audio input using PortAudio
CrossoverUnit Digital loudspeaker crossover design using Apple's AudioUnit architecture.
Function Generator Simple function generator AudioUnit for MacOS X
SoundBlocks Master's thesis: a set of interconnectable blocks for children to explore music and audio manipulation.

MATLAB audio input MEX

Coming soon...


CrossoverUnit is an AudioUnit plug-in for MacOS X which implements many common filters used in loudspeaker crossovers:

Low Pass
High Pass
All Pass
Butterworth, Linkwitz-Riley, Chebyshev, Bessel types
Up to 8th order
Shelving Low Pass
Shelving High Pass
First order (suitable for dipole speaker equalization)
Boost / Notch Variable depth and Q
Biquad Also known as "Linkwitz Transform" for sealed box equalization


With this plug-in, you can design and audition digital crossovers with any number of drivers and any level of complexity. To do so, you will also need the following:

1. Multi-channel audio interface, with enough outputs for each driver in the system (e.g. 6 channels for stereo 3-way)
2. Power amplifiers for each driver
3. AU Lab, an application which comes with Apple's Developer Tools
4. (optional) Soundflower, a free audio routing utility by Cycling '74

Detailed setup instructions can be found here.

How it works (tech details)

These are IIR filters modeled after their analog equivalents, and indistinguishable from the analog in performance (except that these will have less noise!). Filters are designed starting with continuous-time poles and zeros, which are prewarped and converted to discrete time. Second-order cascade structure and 64-bit double-precision arithmetic are used to minimize rounding error and ensure stability even with very high Q and very low frequency poles.

Download and installation instructions

CrossoverUnit v1.0 (Universal binary, MacOS X 10.4 or later)

To install, drag the component into the following folder:
[Home directory]/Library/Audio/Plug-Ins/Components/

Known issues

The UI currently assumes a sample rate of 44.1k. The filter itself should work at any sample rate, although this has not been tested.

Because the state of the filter is cleared every time a parameter is changed, sweeping a parameter results in small clicks. This is only an issue when the parameters are actively changing, and should not come up in the operation of a normal crossover.

AudioUnit function generator

This simple plug-in makes use of Apple's new generator class of AudioUnits to implement a waveform generator. Frequency and amplitude are controllable, and the waveform can be sine, triangle, square, or sawtooth.


Any application that supports generator AudioUnits can use this plug-in. Apple's AU Lab (available with the Developer Tools) is one such application. In AU Lab, make a new document with the desired number of output channels, and select the audio interface to use. Then with the document window open, choose "Add Audio Unit Generator" from the Edit menu and select APM->FunctionGenerator.

Download and installation instructions

FunctionGenerator v1.0 (Universal binary, MacOS X 10.4 or later)

To install, drag the component into the following folder:
[Home directory]/Library/Audio/Plug-Ins/Components/

Known issues

The UI currently assumes a sample rate of 44.1k. The only practical consequence is that the maximum frequency is 22050Hz.


"SoundBlocks is a tangible environment where young users connect blocks to describe network dataflow. The environment explores digital sound manipulation as a personal, meaningful and fun artistic endeavor, rather than as a venture into mathematical, electronic or networking relationships. Led by their own curiosity, children can design their own sounds by exploring SoundBlocks. In doing so, they will indirectly learn about networks, mathematics and hardware synthesizers and sequencers. The environment will shift the child's focus from the product of creation to the process of creation."

--John Harrison

This is my master's thesis at MIT, completed in 2005 at the MIT Media Lab. The project was a collaboration with John Harrison, now director of CRATEL, the Center for Research in Arts, Technology, Education, and Learning at Wichita State University. My thesis focused on the circuit design and firmware of the physical blocks, as well as the software to communicate between computer and block network.


This thesis describes the technical implementation of a set of interconnectable blocks designed to be used by children to explore the possibilities of digital sound manipulation. In contrast to similar modular systems, this project places an emphasis on achieving the minimum possible cost. Every aspect of the design from the circuitry to the high-level code will be covered. Two particular innovations will be described in detail: first, a new method of combining power, data, and clock signals onto a single wire, and second, a method of determining the topology of a network of devices usually connected electrically in parallel.

John Harrison's SoundBlocks page