Music 320C Spring 2021

Audio Plugin Development in Faust and C++

Music 320C focuses on audio plugin development in the FAUST and C++ languages, organized and supported by the JUCE multiplatform development framework, or used within interactive programming environments such as ChucK, Pure Data, or SuperCollider. The principal activity is a software project due at the end of the quarter, with a progress-report demo mid-quarter. Lectures introduce the FAUST language for audio signal processing and the JUCE framework for audio plugin development. A progressive series of example plugins is covered in class. Familiarity with C++ and elementary UNIX-style software development is required. Signal processing theory on the level of Music 320A and/or 320B is assumed.

Goals of the Lectures

  • Acquire facility in the FAUST language for audio signal processing
  • Learn which interactive programming environments are most easily used with FAUST
  • Become aware of some of the signal-processing tools in the FAUST Libraries
  • Be able to use FAUST-generated C++ modules in a professional quality audio plugin
  • Be apprised of various options for creating an audio plugin GUI

Goals of the Project

  • Hands-on experience making your own audio plugin using FAUST, C++, and signal processing tools

When, Where, Who

Term Spring 2021
Location Online (Zoom)
Time MW 2:30pm
Instructor Julius Smith (jos at ccrma)
TA Vidya Rangasayee (vidya at ccrma)

Administrative Information

Visit here for Announcements, Units, Prerequisites...


Below is the schedule of weekly in-class presentations, with pointers to all associated reading, lecture overheads, and so on. The default weekly topic is learning the FAUST language for signal processing and the JUCE development platform for C++ audio plugins. Additional discussion will be driven by the interests, projects, and any research activities of the participants. Results and associated pointers will be logged here.


Here's a collection of student/instructor projects from this quarter

Julius Smith

Make my first "meta plugin" that writes out files for other plugins to read. Learn how to make better GUIs for plugin Editors

Andrea Baldioceda

David Braun

To summarize, I plan on making a wavetable synthesizer with many features:

  • 2D Wavetable oscillators
  • The 2D wavetables can be set via Python or some C++ API.
  • Polyphony
  • Various filters and FX
  • API for modular routing (modular synthesis)
  • LFOs and Envelopes whose outputs are accessible

Champ Darabundit

The goal of my project is to create a synthesizer in Faust by combining an acoustic model of a simple pipe organ and circuit models of some wavefolders, such as the Buchla 259 Wavefolder. The learning goals of my project are to learn acoustic modeling and implement non-linear models in Faust.

Mike Mulshine

I want to make a quirky, visually elaborate, "all-in-one," "one-stop" Vocal FX plugin for singer-songwriters, rappers, and other vocalists.

Joss Saltzman

Create a plugin which performs "color sonification," using the colors of a video to modulate an accompanying piece of music/audio. The RGB values of the average color of each frame will be used as inputs into audio effects, effectively creating a parametric mapping between video color and audio manipulation.