VoiceOfFaust

Turns any monophonic sound into a synthesizer, preserving the pitch and spectral dynamics of the input. The name was chosen because I use it mostly to turn my voice into a singing robot, and it’s made in Faust.

These are some silly demo songs. And an even sillier video:

https://github.com/magnetophon/VoiceOfFaust/assets/7645711/d7c57e94-4d83-4fe2-b1d9-f2fd55cb7e11

Overview

VoiceOfFaust consists of:

Table of Contents

Building and running

Install Faust.
Clone, build and install:

git clone https://github.com/magnetophon/VoiceOfFaust.git
cd VoiceOfFaust
make -j8
sudo make install

For the pitchtracker you need to install pd-extended.

You also need jack.

To run VoiceOfFaust, it’s easiest to use the …_PT scripts, since these will launch the pitchtracker automatically:

 classicVocoder_PT
 CZringmod_PT
 czVocoder_PT
 FMsinger_PT
 FMvocoder_PT
 FOFvocoder_PT
 KarplusStrongSingerMaxi_PT
 KarplusStrongSinger_PT
 PAFvocoder_PT
 stringSinger_PT
 subSinger_PT

Features

Vocoders

features of all vocoders

parameter mapping system

The parameters for the vocoders use a very flexible control system: Each parameter has a bottom and a top knob, where the bottom changes the value at the lowest formant band, and the top the value at the highest formant band. The rest of the formant bands get values that ere evenly spaced in between. For some of them that means linear spacing, for others logarithmic spacing.

For even more flexibility there is a parametric mid: You set it’s value and band number and the parameter values are now:

formant compression/expansion

Scale the volume of each band relative to the others:

Because low frequencies contain more energy than high ones, a lot of expansion will make your sound duller. To counteract that, you can apply a weighting filter, settable from

deEsser

To tame harsh esses, especially when using some formant compression/expansion, there is a deEsser: It has all the usual controlls, but since we already are working on a signals that are split up in bands, with known volumes, it was implemented rather differently:

reEsser

Disabled by default, but can be enabled in the configuration file. It replaces or augments the reduced highs caused by the deEsser.

doubleOscs

This is a compile option, with two settings:

in and output routing

The vocoders can mix their bands together in various ways: We can send all the low bands left and the high ones right, we can alternate the bands between left and right, we can do various mid-side variations we can even do a full Hadamard matrix. All of these, and more, can be clicklessly cross-faded between.

In the classicVocoder, a similar routing matrix sits between the oscillators and the filters.

phase parameters

Since all() formants are made by separate oscillators that are synced to a single guide oscillator, you can set their phases relative to each other. () except for the classicVocoder This allows them to sound like one oscillator when they have static phase relationships, and to sound like many detuned oscillators when their phases are moving.

Together with the output routing, it can also create interesting cancellation effects. For example, with the default settings for the FMvocoder, the formants are one octave up from where you’d expect them to be. When you change the phase or the output routing, they drop down.

These settings are available:

features of individual vocoders

classicVocoder

The gui of the classicVocoder has two sections:

CZvocoder

This is the simplest of the vocoders made out of formant oscilators. You can adjust:

PAFvocoder

Also has frequencies and phases, but adds index for brightness.

FMvocoder

Same parameters, different sound.

FOFvocoder

Original idea by Xavier Rodet. Also has frequencies and phases, but adds:

other synthesizers

FMsinger

A sine wave that modulates its frequency with the input signal. There are five of these, one per octave, and each one has:

CZringmod

Ringmodulates the input audio with emulations of Casio CZ oscillators. Again five octaves, with each octave containing three different oscillators:

KarplusStrongSinger

This takes the idea of a Karplus Strong algorithm, but instead of noise, it uses the input signal. The feedback is ran trough an allpass filter, modulated with an LFO; adapted from the nonLinearModulator in instrument.lib. To keep the level from going out of control, there is a limiter in the feedback path. Parallel to the delay is a separate nonLinearModulator. Globally you can set:

KarplusStrongSingerMaxi

To have more voice control of the spectrum, this one has a kind of vocoder in the feedback path. Since we don’t want the average volume of the feedback path changing much, only the volumes relative to the other bands, the vocoder is made out of equalizers, not bandpass filters. You can adjust it’s

It loses the octave slider, and instead has a separate delay and modulation for each octave.

guide-follower

VoiceOfFaust started life as a port of VocSynth. Here is some in depth documentation for that project.

Enjoy! And don’t forget to tell me what you think of it and send me music you’ve made with it!