Table des matières

OM-Chant: Control of Chant Synthesis in OpenMusic

This project focuses on the control and integration of the Chant synthesiser (which implements in particular the original technique of FOF synthesis) in OpenMusic. This integration implies specific issues related to the "phrase-oriented" and continuous aspects of the control of Chant, allowing innovative approaches and sound creation processes to be implemented in the computer-aided composition environment.

Jean Bresson
Raphaël Foulon (Masters student)
Marco Stroppa (musical research)

History and principles

Schéma de principe du synthétiseur CHANT.

The Chant synthesiser was developed by Xavier Rodet and his team at IRCAM in the early 80s, at the origin in order to simulate and reproduce sung voice sounds, but also in order to create more abstract sounds using the same production model.

FOF synthesis (for French "Fonctions d'Ondes Formantiques", or formant wave functions, the main synthesis technique implemented in Chant) models the vocal production system considering an excitation signal and his response to a resonant system. In contrast with the more traditional "source-filter" model, the FOF synthesis generates trains of small signals (simple sinusoids multiplied by an exponential envelope) at a given frequency, which contribute to the overall spectrum of the resulting signal with a formant (a FOF synthesiser in compound of several FOF generators in parallel, each one producing one formant).

Formants are modulations of the spectrum characterizing vocal signals. They can be described with few simple and intuitive parameters (central frequency, amplitude, bandwidth, etc.) which have a direct matching with the parameters of the FOFs.

The Chant synthesiser is initialised by the connexion of several synthesis or processing modules. These modules can be FOF generators, but also noise generators, sounds, or resonant filter banks. The control is performed by independent processes setting and updating periodically the values of the different parameters of these modules.

A set of rules have been defined and integrated in early implementations of the synthesiser, allowing to obtain more "natural sounds" by computing or linking the value of some parameters to the evolution of others (e.g., say, the formant frequency may slightly vary on the amplitude and fundamental frequency, etc.) Standard controls such as the jitter (parametrized random perturbations around a given parameter value) or the vibrato (sinusoidal modulation) also allow to add quality and realism to the synthesised sounds.

Chant was integrated in several environments and projects focusing on the control of sound synthesis. In Formes, high-level processes could be defined in a context integrating the control rules to advanced temporal structures. The Diphone software, more than ten years later, allowed to combine graphically static parameters blocks in order to generate continuous phrases by interpolation, but a the same time abandoned the "rule-based" synthesis aspects. Very few possibilities of were still available for the use of Chant,1) until its recent integration to OpenMusic.


Computer Music Journal 8(3), 1984, contains 3 reference articles about the chant project and the original works of Xavier Rodet and the Analysis/Synthesis team:

About the integration of Chant in OpenMusic with OM-Chant and Chant-lib (another library based on Csound FOF synthesis):

The OM-Chant Project

 Chant control model

The Chant synthesizer is controlled via SDIF files (Sound Description Interchange Format) where the state of the synthesis modules are specified at different times (and with a free and non-regular rate), and interpolates between these states in order to compute the output sound at the final sample rate.

Chant control objects in OpenMusic

The basic tools in the OM-Chant library allow to format, write and use this control file in order produce sounds in visual programs and compositional processes developed in OM. The notion of synthesis events, inspired from a similar concept in the OMChroma framework, has been used to define high-level control structures in the form of parameter matrices [parameters x components].

Each synthesis event (or matrix) has a number of parameters (e.g. frequency, amplitude, bandwidth) defined for a number of "components" (typically, the different formants in a Chant synthesis process). The synthesis events have an "onset" (also called "action time") and a duration allowing to situate them in a larger-scale time structure. As a result, each event produces at least 2 SDIF frames in the final control sequence, corresponding to the state of a module at the event onset and at its end (onset + duration).

Different types (or classes) of Chant synthesis event have been defined to control the FOF module parameters (classes CH-FOF and CH-F0), the resonant filters (class CH-FLT) or the noise generators (CH-NOISE). (Note that CH-F0 and CH-NOISE are not matrices but scalar controllers).

More about the control of Chant in OM:

Continuous Control

The control and internal structure of the synthesize make for a "continuous" approach of the sound synthesis processes with Chant. While the compositional framework in OM is discrete and "event-based", Chant takes the control sequence to produce a monophonic "phrase" out of the specified state and variation of the parameters.

Continuous evolutions inside a Chant event. The evolution of the paramaters can controlled at different levels in the control processes :

Continuous control procedures in OM-Chant

Raphaël Foulon's Master thesis (Etude et implémentation de procédures de contrôle continu pour la synthèse par fonctions d'ondes formantiques) proposes several options to deal with transitions and intermediate states for the modeling of sung voice and extended sounds (Check the examples and tutorials).

In the 2.0 version of the OM-Chant library, several classes and functions have been designed to imitate vocal phenomenons linked to the vocal model, especially the consonants and the "vocal articulations". These tools allow the user to create transitions and morphing processes between successive ch-fof events.

Adding transitions bewteen two ch-fof events

The function "gen-inter-fof" takes two ch-fof events, and produces a new one which represents the transition between the first ones. The transition is created following a "transition profile", stored in a "fmt-profile" object. A "fmt-profile" object is a matrix, which stores a set of curves representing the evolution of formantic parameters over time (during the transition), and an interpolation curve to morph the transition from the first ch-fof event to the second one.

The transition event itself will take place :

This function can be used with the "ch-transition" tool, to create transitions within a stream of ch-fof events. In such a case, a "dictionary patch" can be used to store the different transition profiles.

Morphing ch-fof events

The function "fof-morph" creates an non-linear interpolation (morphing) between the formantic parameters of two (or more) ch-fof events. The morphing is effective on the portion where the ch-fof events are overlapping. Two bpfs events are given as an input to determine the "morphing profile". If two events are overlapping, only the first one is used, and if three events are overlapping, both will define the morphing profile (in this case, we use the term "3D morphing").

Using the OM maquettes to create event sequences

We have designed several tools which help the user to define a sequence of events in the "maquettes" environment. These tools help the user to create temporalboxes representing the fof and f0 events. This way, basic events such as constant f0, f0 with vibrato/jitter, fofs, fof morphing, etc. can be created and moved within a maquette, to produce complex processes such as a vocal phrase.

Some functions allow the user to generate a maquette, containing event modules, with high-level musical structures, such as chord-seqs, and a module database.

1) The FOF synthesis principle has been re-implemented by M. Clarke and is still available in Csound or in Max/MSP.