• Formant-Wave-Function Synthesis Faust Library
    This project contains an implementation in the Faust programming language of the theory from my paper “A Hybrid Filter–Wavetable Oscillator Technique for Formant-Wave-Function Synthesis”.

    From the readme file:

    Fof.dsp is a collection of FAUST (faust.grame.fr) objects that work together to implement a filter–wavetable oscillator version of Formant-Wave-Function (FOF) synthesis. FOF is a vocal synthesis technique invented by Xavier Rodet at IRCAM in the early 1980s. The version of FOF contained herein accompanies the paper “A Hybrid Filter–Wavetable Oscillator technique for Formant-Wave-Function Synthesis” by Michael Jorgen Olsen, Julius O. Smith III and Jonathan S. Abel which was presented at the 2016 Sound and Music Computing Conference in Hamburg, Germany.

  • Dynamic Range Compression Faust Library
    This project contains an implementation of a variety of different dynamic range compressor components that I created for a final project of the course Music 424 at CCRMA.

    From the readme file:

    comp.dsp is a collection of FAUST (faust.grame.fr) objects that work together to implement feedforward and feedback compressor architectures. A variety of different types of level detectors are included including detectors that release to threshold, release to value and implement program dependency. The implementation is closely based on the ideas taught in the Stanford University course MUSIC 424: Signal Processing Techniques for Digital Audio Effects.

  • Yet Another Polyphonic Synth
    This project contains an implementation of a polyphonic, midi VST synthesizer plugin which I made for one of the homeworks for the course Music 256a at CCRMA. The project uses the JUCE library for the basic plugin architecture and Faust code exported as a C++ class to handle the audio DSP.

    From the readme file:

    This application is a audio plugin that implements a polyphonic midi synthesizer. The app consists of a single bandlimited pulsetrain oscillator which features controls over the duty cycle (amount of time pulse is non-zero during a single period of the signal) and detune (from -19 to 19 cents). The plugin also features an ADSR and a resonant lowpass filter whose cutoff frequency and filter Q can be controlled. The detune amount, duty cycle, cutoff frequency and Q can be controlled by midi controller numbers 41 - 44, respectively.

    Here is a short demo video of the plugin in action:

  • La-Di-Da FOF Audio Plugin
    This application is a audio plugin that implements a polyphonic midi formant-wave-function (FOF) singing voice synthesizer. The application implements the method developed in my paper “A Hybrid Filter–Wavetable Oscillator Technique for Formant-Wave-Function Synthesis”. A set of synthesis rules from the chant-lib Open Music implmenetation of FOF have been implmented. This includes micromodulations on the fundamental frequency and on the frequency and depth of the vibrato, automatic adjustment of the center frequencies of the first two formants when the fundamental pitch rises above the first formant and automatic adjustment of the amplitudes of the formants to reinforce the higher formants at higher fundamental frequencies.Random deviations of the fundamental frequency, vibrato rate and the formant parameters has been implmented to make the different notes when playing with polyphony sound like unique voices that would comprise a choir.

    The current version implments the technique for male and female voices. The male voice changes from bass to tenor formant settings and the female voice changes from contralto to soprano, both at predefined transition frequencies. The application also features three different vowel selection boxes from which four different vowels (A, E, O and U) can be picked. There is a rotary fader which allows the user to modulate between the three currently selected vowel types. There is also an ADSR amplitude envelope, a gain control and a vibrato with depth and rate controls.

    LaDiDa Screenshot

    All of the parameters can be controlled using a midi controller with the following mappings:
CC # Parameter Name
1 Vowel Mix
21 Gain
22 Vibrato Depth
23 Vibrato Rate
25 Vowel #1
26 Vowel #2
27 Vowel #3


    To build the app, use the tool relevant to your OS (Mac: Xcode, Linux: makefile, PC: VisualStudio) where the projects are located in the Builds directory. The JUCE project is currently configured to create a VST plugin but this can be changed to the plugin architecture of your preference by opening the LaDiDa.projucer project file in the [JUCE projucer](https://www.juce.com/get-juce) and selecting the preferred architecture in the Project Settings page, saving the project and then building with the correct tool for your OS. You will most likely need to update the paths of the JUCE modules in the Introjucer to be the paths where you have the JUCE resources stored.
    Packaged Version of the program

    Demo video: