MAT-240D: Digital Audio Programming: Sound Synthesis Techniques


Fall 2005 - Student Projects

Ryan Avery
DP Granule (webpage)
DP Granule is a polyphonic sample granulator and playback engine written as an experiment on intermediate-level VST design. It is a funky implementation of granular synthesis, a technique for dividing sounds into small sound "grains". Why is it so funky? Because it's an odd mess of hard coding, un-implemented features, and "unusual" design practices. Give it a try - you may or may not be disappointed...

Jorge Castellanos
fmScreen (OS X source)
fmScreen is a simple FM synthesizer that takes the parameters from the mouse position. The X coordinate of the mouse controls the carrier frequency, while the Y coordinate controls the modulation index (the amplitude of the modulator). Other parameters can be changed by using the alphanumeric keys (1 -6), where 1-2 controls the volume of the carrier; 3-4 controls the frequency of the modulator, and 5-6 controls the sampling time of the mouse position. This last parameter allows for a sustain of notes, that simulates playing notes at certain rhythm, or if set very fast, then it becomes a continuous tone sweeping up and down.

Zack Davis
Waveguide Mesh (folder)
This download contains source, binaries, and Visual Studio .NET project files for a waveguide mesh audio and visual simulation. A mesh of 4-way scattering junctions is created as a simple physical model of a percussive instrument, such as a drum.

Chaos (folder)
This download contains source, binaries, and Visual Studio .NET project files for three chaotic oscillators. The three oscillators are based on Lorenz difference equations, Chua's Equations, and Duffing's Equation.

Melissa De Bartolomeo
GLUI (Win32 source/binary)
This program is an example of how several multimedia APIs can integrate with a user interface to load in and play audio samples from files on a computer, synthesize FM, display a waveform corresponding to audio being played, and allow the user to change attributes or select various audio files, either with a graphical user interface or with key bindings used over the waveform image. This program uses the PortAudio and Libsndfile APIs for the audio portion, the OpenGL Utility Toolkit (GLUT) and OpenGL for the visual portion and the GLUI API for the user interface portion. It was built on the Win32 platform using the Dev-Cpp IDE.

FM (Win32 source/binary)
This program is an example of FM synthesis. It creates an FM signal in the PortAudio callback. The user can enter 2 numbers in the console (separated by spaces or by the carriage return key) which changes the modulation frequency and the carrier frequency.

Karplus-Strong (Win32 source/binary)
This program is an implementation of the basic Karplus-Strong algorithm with a pre-set delay line. The size of the delay and length of the note are both hard-coded.

MarkDavid Hosale
GrainBuffer (webpage)
Independent control over the buffer and the grian creation. Users can set the rate at which the grains read from the buffer, independent of their dispersion or duration. Loop points in the buffer can be set. And there is a randomness feature, which sets the amount of randomness around the buffer read pointer. This produces effects ranging from a 'blurring' effect to that of total randomness of grain sources.

Eric Newman
FM View (webpage)
FMView is a visualization tool which allows a user to control FM synthesis parameters in real-time using the mouse, and displays either the zero-crossing-locked waveform, or the FFT, of the resulting audio. The x-position of the cursor controls the carrier frequency; the y-position controls the modulation frequency; and the middle mouse button controls the modulation width.

FractalSonifier (webpage)
Fractal Sonifier creates audio waveforms based on fractal boundaries. It allows a user to interactively zoom and pan the Mandelbrot set, select a "C" value in the stable (connected) region, and display the corresponding Julia set. After a desired iteration level is chosen, the border of the Julia set is traced using a recursive search algorithm, and the real and imaginary components are converted into left-channel and right-channel audio signals. These signals may be played in real-time through the sound card, or written to disk for later use.

Gran-U-Vis (webpage)
Gran-U-Vis is a low-latency audio processor and full-screen OpenGL visualizer which converts incoming microphone signals into granulated audio packets and plays them back stereophonically in real time. Using custom GUI sliders, users may interactively modify such audio parameters as pitch, pitch randomization, grain delay, grain size, and stereo field width. The visualization may be rotated and zoomed in three dimensions using the mouse, and motion blur speed may be increased or reversed.


Alex Norman
PD WaveShaper (webpage)
I created a very simple waveshaper for Pure Data. It is based off the internal PD tabread~ object. You give the object a name of an array that you'd like to use for the wave-shaping function (you can also specify a new array to use by sending a "set arrayname" message to left input). This array is used to compute output samples based on the value of the input samples.

Saw Synth and Score Sequencer (webpage)
Earlier in the class I created a saw-tooth wave synthesizer with an ADSR envelope that reads note information from standard in. I also made a note sequencer that writes to standard out. If you "pipe" data from the note sequencer to the saw-synth then you can play melodies.

Sarah Stuckey
Granulator (Win32 source/binary)
Granulator is an application that makes grains in real-time from a sample file specified by the user. Several parameters are controllable, such as the grain-making increment, grain randomization, grain duration, and the number of grains. Panning between the left and right channels may also be applied. A visual display appears in the bottom of the window, and shows the sample data. A vertical position bar moves forward or backward through the sample, or randomly, based on the grain-making parameters. The position bar always shows the starting position of the grains as they are produced. Granulator is written in C, using the following APIs: PortAudio, LibSndFile, OpenGL, and the Windows API.

Graham Wakefield
Granulator (webpage)
My final project was an application to perform granular processing of audio files, under the control of a visualised grain scheduler with a user interface for scheduling parameters.

Will Wolcott
Swing (webpage)
Swing is a form of non-linear physical model synthesis. The program models a classical double pendulum gathering audio samples from the position of the second weight over time. The pendulum is controled by its physical attributes. Either weight can be "pushed" by adding momentum which causes a change in angle to ground.

Grainer (webpage)
Grainer is a program which creates a granular synthesis grain cloud. Using a sine wave lookup table, short, enveloped "grains" of sine waves are mixed at varying times and frequencies. This program runs 100 grains at once with randomly chosen frequencies around a center frequency. The implimentation uses linked lists to destroy finished grains and spawn new ones.

Jorge Castellanos & Will Wolcott
KasteWolkShaper (webpage)
The program takes either of two inputs, a table-lookup sine wave or microphone input. The wave shaper quantizes and maps input amplitude to a user defined output amplitude. The trivial and default waveshaper is one-to-one, where the output is identical to the input. However, the wave shaper can be used to create more interesting results. The GUI of this program gives the user control over the 2-D plot of input-to-output mapping. The user can add polynomials to the mapping which produces harmonics on the signal. In addition, the user can move specific points on the mapping which the program interpolates between. The plot can be filtered for a smoother mapping. All these parameters can be control from the GUI or from MIDI control signals as in the MIDI-man knob box.