ACHTUNG! This project is abandoned, but the work continues. Parts of it now live on in sndkit as the glottis and tract algorithms, and are featured in vocshape.


Voc is a physical model of the vocal tract. It is based off of Neil Thapen's Pink Trombone, but rewritten in portable ANSI C code.

Voc uses the classic Kelly-Lochbaum vocal synthesis technique, one of the earliest attempts at digital physical modelling. The Kelly-Lochbaum approach approximates the vocal tract as tube-model, consisting of a series of cylinders with varying diameters. The excitation signal used with the Tract is the Liljencrants-Fant glottal pulse model, a highly accurate mathematical approximation of the glottal wave.

Literate Programming

Voc is written using Literate Programming, a programming paradigm created by Donald Knuth of TeX and The Art of Computer Programming Fame. In literate programming, one melts natural language and computer code together in order to better articulate what the program does. In some ways, it can be thought of a very integrated form of code documentation. Voc uses a program called CWEB, the classic literate documentation system developed by Knuth himself and Silvio Levy.

As a result of literate programming, Voc has two formats. One format is the C code itself, designed to be read by compilers. The other format is TeX code, which can be compiled into a readable PDF document.

The main motiviation behind using a literate documentation system like CWEB is is in the fact that while C is great language for implementing audio DSP algorithms, it is a sore language for trying to understand them. With CWEB, one can use plain english and TeX's math mode to better convey some of concepts in the implementation.

Source code

The source code to Voc can be found on github.

At the very minimum, CWEB, GNUplot, and Soundpipe need to be installed. Sporth must be installed in order to compile and use the Sporth plugin.

The generated output of cweave of can be found here. The title page has the git commit hash, which can be used to see how updated the document is with the upstream code.

Demo Program

For those wishing to try out Voc with minimum hassle, there is a realtime voc demo which is able to compile for both Mac OSX and Linux systems running JACK. It contains a copy of Voc's generated C code, which makes it much easier to build than the Voc source code. Soundpipe and GLFW3 are needed dependencies.

Voc Demo

Sporth Examples and Visualizations

The videos below showcase Voc being used in a musical context. The sounds were synthesized using Sporth and the Sporth plugin implementation of Voc. The visuals were generated via Cairo, FFMPEG, and Runt via Pixku.

Each example has two videos that accompany it.

The first video visualizes the four main parameters of the Voc Sporth Ugen.

Frequency is not visualized.

The second video visualizes how the vocal tract is changing as a two dimensional plot of each of the diameters.


The first real patch created in Sporth using Voc was Babble. Babble makes good use of interpolated random number generators and jitter to produce sounds that mimic a babbling person.

Voc: Babble (Sliders) from Paul Batchelor on Vimeo.

Voc: Babble (Vocal Tract Plot) from Paul Batchelor on Vimeo.


The patch Chant was an attempt to build a constrasting patch to Babble, this time focusing on slow moving periodic modulations instead of fast and random ones. Voc is able to turn into a something resembling a chanting monk by picking a low fundamental frequency, a high velum, low frequency sinusoidal modulation of the position, as well as a high diameter parameter. A lowend boost and reverb is added to taste.

Voc: Chant (Sliders) from Paul Batchelor on Vimeo.

Voc: Chant (Vocal Tract Plot) from Paul Batchelor on Vimeo.


This was an attempt to find interesting values from the tongue control parameters, as well as build something tonal. Both diameter and position are mapped to clocked envelope generators, which have the effect of going between two vowel states. In this case, they make a sound which approximates the nonsensical word "unya".

Voc: Unya (Sliders) from Paul Batchelor on Vimeo.

Voc: Unya (Vocal Tract Plot) from Paul Batchelor on Vimeo.