Department of Electrical Engineering - Columbia University

[SEAS logo]

ELEN E4896 - Spring 2016


Home page

Course outline




Columbia Courseworks E4896

Code resources

This page links to the various code resources (Matlab, Processing, Pd) associated with the course. Most of these resources are located in the course Code directory.

You can find more Processing sketches at my personal Processing examples page. But most of the examples on that page and below are for Processing 1; the only ones that I have updated for Processing 3 (the current version as of Spring 2016) are:

These are the ones I have been using in class. You will need the minim audio library, which means unpacking the zip file into your Processing Libraries folder.

For Pd, you should download and install Pd-extended (which should be easy to install for all platforms).

As an introduction/tutorial on Pd, I recommend the PureData Floss Manual. A good reference for Pd is Miller Puckette's book The Theory and Technique of Electronic Music. To look up individual units, you can try the Index of the online HTML version. A more terse description of the basic operation of Pd is in Miller's original Pd manual. See also the Introduction to Pd excerpted from Andy Farnell's book, Designing Sound - Practical synthetic sound design for film, games and interactive media using dataflow. There's also a useful 2 page cheat sheet which I got from F J Kraan. Finally, there's a list of all the units in Pd-extended at Protman sound+music.

Here is the Processing ``sketch'' for the Live Spectrogram (updated for Processing v3). You should be simply able to copy and paste this text into the Processing window. You can download the processing environment from the

The plain implementation of the Karplus-Strong plucked string in Processing is plucked_string.pde. The same thing with a spectrogram in the background is plucked_string_sgram.pde, and the one where you can shift-click on the string to damp it at different places is plucked_string_damp.pde.
The simple plucked string in Pd is karplus_strong1.pd. It's based on the nicely encapsulated karpluck~.pd which I got from Loomer. The simple test setup for karpluck is demo_karpluck.pd (which uses the keybd.pd patch to simulate note events from the computer keyboard), and the 6-voice polyphonic version is ks-polysynth.pd which wraps the karpluck unit in ks-voice~.pd .
Here is the YouTube link for High-speed video of guitar string vibration and the segment of the TV show Time Warp featuring Metallica.

Here is the simplesynth Pd patch I was playing with in class. It relies on keybd to allow the computer keyboard to act like piano keys, cmap to do simple control-range mapping (which also needs twoway), and adsr~ for envelope generation. You might also try oscillator~, which is the band-limited pulse-width-modulated oscillator.
A good place to start with Pd is the PureData Floss Manual I recommended. I visualized the waveforms properties with the Processing sketches Oscilloscope and LiveSpectrum_grid.

The interactive sinusoidal analysis/synthesis program I used in class is Michael Klingbeil's SPEAR, which is available for Mac and Windows. The Matlab code for noise-residual construction is available on my page on Sinusoid+Noise Analysis in Matlab. Pd patches to resynthesize an analysis file exported from SPEAR are provided for this week's practical. You can also read and rewrite them with Matlab using spearread.m and spearwrite.m.

The Pd patch I used to listen to single-pole-pair resonances is impulse_bpf.pd. I was using the Processing sketches Oscope_Spectrum (now updated for Processing v3) and LiveSpectrogram_wvfm to analyze the results. For the LPC analysis in Matlab, I used lpcfit.m and lpcsynth.m; you can see examples of how to use them in this Matlab diary (which uses plotspec.m). The Buzz/Hiss residual encoding that I mentioned but didn't get to play is implemented by lpcBHenc.m and lpcBHdec.m whose use is described in their comments. I've also converted all this to Python which you can see in an IPython notebook, E4896_L06_lpc_diary.ipynb. The LPC cross-synthesis in Pd is part of practical 5.

Here are the Pd patches I used to demo various slides: The patches also use loadsoundfile.pd, playloop.pd, and playsound~.pd to play sound files, audiosel~.pd to select audio streams, and plotpowspec~.pd. The example of group delay applied to audio on slide 5 comes from my ELEN E4810 diary for allpass, and the example of reverb by convolution was from the convolution introduction.

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial 3.0 Unported License.
Dan Ellis <>
Last updated: Sun Feb 28 22:39:39 EST 2016