Categories
Audio Dev

VE1939: A Real Time, Expressive Vocal Encoder for Musical Performance

I built a real time vocoder performance system on a team with Kenny Carlsen, Alex Miller, and Lena Sutter for my Major Design Experience senior project.

Lena Sutter, Emma Azelborn, Alex Miller, and Kenny Carlsen presenting the VE1939 at Design Expo

The goal of the VE1939 Vocoder was to create an expressive, playable vocoder with a suite of hardware controlled digital effects including distortion, chorus, delay, compression, and sweepable filters.  The hardware used in the VE1939 includes two TI C5515 ezDSP chips, a Raspberry Pi 2 Model B, an Arduino Mega, a MIDI keyboard, a 7’’ touch screen, and a microphone. The Raspberry Pi is used for synthesis, one C5515 does the vocoder computations, the second C5515 processes effects, and the Mega takes analog inputs from the knobs and faders that are mounted on the box.

Measured speech and synthesizer input spectrums compared with the resulting output spectrum from the VE1939

The vocoder algorithm is not much more complex than a simple filter. First, the signal is windowed and we take the Fast Fourier Transform (FFT) of both the synthesized signal from the Raspberry Pi and the speech signal from the microphone input. The magnitude of each signal is multiplied and the phase component of only the synthesized signal is preserved. The inverse transform of this new magnitude and phase combination is taken, the window is applied again, and the result is a vocoded output.

The distortion, EQ, chorus, and delay effects are all time domain based signal processing. The distortion is a bit crusher, which is a highly efficient distortion method that limits the number of bits representing the signal. The delay is a circular buffer with offset read and write indexes according to the user specified delay time. It also includes a feedback line between the read and write indexes, allowing for multiple repetitions of the sound. The best non-real time prototype of the chorus implements a similar circular buffer and feedback schema, but the distance between the read and write indexes is sinusoidally varying. In order to prevent pops and clicks from the discontinuities this causes, linear interpolation is done between the sampled values.   The EQ design uses a filter bank of three simple direct-form II biquad design with 5 coefficients per filter.  The filters were designed to allow the coefficients to be updated in real time thus giving the user the ability to change filter gain and corner/center frequency for filter sweep effects.

For more details, see the full final report: VE1939FinalWrittenReport