Traité de synthèse sonore

Le modèle additif

Le modèle additif considère le son comme la somme d'ondes sinusoïdales, chacune dotées d'une fréquence et d'une intensité propre. Chacun de ces éléments est appelé partiel, ou sous certaines conditions harmonique. Ce modèle est efficace pour des sons harmoniques ou inharmoniques pas ou peu bruités. Un autre avantage important  est qu'il est à la fois une forme d’analyse et un mode de synthèse : c’est-à-dire qu’il présente une certaine forme de réversibilité. Il s’accorde pleinement avec une pensée spectrale et des structures où les partiels (harmoniques ou non) sont clairement identifiés.
Onde Sinusoïdale 

 
La forme d’onde sinusoïdale représente ce que l’on a habitude de nommer un son pur. Il faut cependant ici prendre ce terme de pur non pas sur un plan qualitatif décrivant une sensation, mais dans une acception quantitative. L'onde sinusoïdale est bâtie avec un partiel unique. À l’écoute, le timbre est très pauvre et paradoxalement provoque une sensation de hauteur (note) pas toujours très nette, moins évidente que celle procurée par certaines formes d’ondes, plus riches en harmoniques.
L’onde sinusoïdale est intéressante pour la construction de timbres complexes dont on désire maîtriser finement la structure et l’évolution. Elle peut servir également, utilisée en très basse fréquence, comme outil de modulation, comme on le verra dans des développements ultérieurs.
De nombreux outils logiciels permettent la génération d’ondes sinusoïdales. Les quelques exemples ci-dessous le montrent.
3 outils (parmi d'autres) pour créer une onde Sinusoïdale 
[Télécharger les exemples 1-a-b-c (fichier zip)]

[exemple 1-a]



Le texte en vert derrière le signe ; (point virgule) est du commentaire qui sera ignoré lors de la compilation (fabrication du son par l'ordinateur). La fonction Csound oscili est un oscillateur à table d'onde. On le met en œuvre avec l'étiquette a1. Le nom de cette étiquette est choisi librement par l'utilisateur mais doit impérativement commencer par la lettre "a" (qui signifie "audio"). Il faut fournir 3 arguments (séparées par des virgules) à la fonction oscili. Ces valeurs représentent successivement : L'amplitude (l'expression 0dbfs signifie que la forme d'onde aura l'amplitude maximum possible). La fréquence de l'oscillateur, 220Hz dans notre exemple. La table d'onde (ici n°1) utilisée pour le son. La table d'onde est définie dans la partie score du programme. Dans le score : la ligne f 1 0 1024 10 1 défini une forme d'onde sinusoïdale. La ligne i 1 0 5 sigifie que le son est joué avec l'instrument n°1 (cf. instr1 dans la partie instruments), à partir du temps 0 (pas de silence en début) et pour une durée de 5 secondes.
Csound est un langage de programmation extrêmement puissant et varié dans les modes de synthèse et les traitements qu'il aborde.
Bien que permettant dans ses développements avancés l'usage d'éléments graphiques, c'est essentiellement par l'écriture de lignes de codes que l'on accède au son.
Un programme du synthétiseur Csound est divisé en deux entitées :
    Entre les balises <CsInstrument> et </CsInstrument>
Les instruments, où se définissent les éléments audio qui seront mis en œuvre pour la synthèse.
    Entre les balises <CsScore> et </CsScore>
.
Le Score où sont construites les tables d'ondes et utilisés les instruments définis précédemment.
Le site de Csound
Écouter  l'exemple 1-a



Simple sinus avec Pure Data et Max
[exemples 1-b et 1-c]
Avec Pure Data ou Max, outils modulaires et graphiques, la fréquence est ajustable en temps réel, et la synthèse n’est pas limitée à une durée fixe.Remarque : On multiplie (objet *~) la sortie de l'oscillateur (objet osc~ ou cycle~) par une valeur inférieure à 1 pour éviter une amplitude trop importante. On ouvre ainsi la possibilité de mettre en oeuvre plusieurs oscillateurs simultanés. Il est aussi possible de connecter à l'entrée droite de l'objet *~ une boite de nombre ou un potentiomètre graphique (variant entre 0 et 1)  afin de controler l' intensité.
Sinus avec Supercollider.
Supercollider est un autre langage de synthèse extrêmement puissant. Sa syntaxe peut paraitre délicate à mettre en oeuvre, mais elle permet de créer de façon compacte des événements sonores d'une grande variété. L'oscillateur sinusoïdal se crée avec la fonction SinOsc. L'extension .ar signifie que nous la calculons comme signal audio. Les 3 arguments désignent : (fréquence, phase, intensité). {SinOsc.ar(440,0,1)}.play;
Le site supercollider

Harmonie, inharmonicité.
Un son harmonique laisse entendre une hauteur précise (une note) : c’est le cas le majorité des instruments de musique. Cette structure sonore obéit à une règle précise. L'organisation harmonique se fonde sur une fréquence fondamentale composante la plus basse du son et qui produit la note entendue. Les harmoniques s’organisent en relation avec la fondamentale. Leurs fréquences respectives sont les multiples entiers de celle-ci. Ainsi si l’on considère une fondamentale (ou harmonique 1) d’une fréquence quelconque et notée f0, les harmoniques 2, 3, 4, 5 etc, prendront successivement la valeur 2f0, 3f0, 4f0, 5f0 etc. Cette structure dont l’énoncé s’avère très simple engendre cependant un ensemble vaste et subtil d'opportunités de création musicale et sonore, où il s’agit de coupler cette définition de structure à la perception des sons. Le nombre et les différents dosages des harmoniques agissent pour l’oreille comme des variations de timbre de cette hauteur fondamentale. Cela laisse entendre que le timbre instrumental est dû à cette composante spectrale. Nous verrons cependant que cette définition est insuffisante pour rendre compte pleinement du timbre. On parlera d'inharmonicité quand la relation entre les partiels n'obéiront pas à cette structure arithmétique. Le discernement d'une hauteur unique deviend alors difficile ou même impossible.
Construire des spectres harmoniques et inharmoniques
[Télécharger les exemples 2-a-b]
Spectre harmonique par addition de sinusoïdales (Csound) [exemple 2-a]

Afin de pouvoir faire jouer plusieurs fois l'oscillateur d'étiquette a1, on ne spécifie plus la fréquence directement comme second argument de la fonction oscili. L'argument p4 signifie que la fréquence est à récupérer dans le score. On joue alors 5 occurences simultanées de l'intrument 1. Les fréquences sont les 5 premières harmoniques d'une fondamentale à 220 Hz (la).
Remarque : les caractères /* entre ces signes */sont une autre manière d'insérer des commentaires dans Csound.









 

(son n°1, message 1)   (son n°2, message 2) 
(son n°3, message 3)     (son n°4, message 4)
Harmonique-inharmonique (Max) [exemple 2-b]
Ce patch reprend les mêmes éléments développés précédemment avec  Csound. Il est fondé sur l’usage de l’objet iosbank~. Cet objet permet de faire entendre simultanément plusieurs dizaines d’oscillateurs sinusoïdaux dont on peut pour chacun spécifier la fréquence, l’amplitude (et éventuellement la phase). Dans cet exemple, on envoie des messages à l’objet ioscbank~ (4 possibiltés sont montrées). Les nombres qui suivent le mot set  sont à lire comme des couples de valeurs, fréquence amplitude. Dans notre exemple, nous comptons 10 nombres par message, c’est à dire une addition de 5 fréquences d'intensité égale (fixée à 0.2). La somme de ces intensités pour ne pas saturer ne doit pas dépasser la valeur 1.
Les messages 1 et 2 créent des sons qui illustrent le phénomène de la fondamentale absente  montrant que la perception de la hauteur est principalement due à la structure du spectre. L’oreille se fonde sur la différence en les harmoniques qui est toujours égale à la fondamentale. La présence effective de le fondalentale n’est pas nécessaire pour provoquer la perception de sa hauteur.Les deux exemples, font entendre deux fois la même note avec toutefois une légère variation de timbre. Si l’on observe les deux distributions de fréquences on constate que le premier message se base sur une fondamentale de 110 Hz et décline dans l’ordre les harmonique de cette fondamentale. Dans le second message, la fréquence la plus basse (220 Hz) n’est pas la fondamentale. Il suffit de regarder les valeurs suivantes pour voir qu’elles restent des multiples de 110Hz, fréquence absente de la structure, mais néanmoins entendue.

remarque : pour bien entendre la différence entre ces deux sons il est nécessaire de les écouter sur des haut-parleurs de bonne qualité et possédant une bande passante suffisament large, ou de les écouter au casque. Des haut-parleurs trop petits risquent de filtrer les basses fréqences et faire sonner de manière identique les deux sons.
 
Les messages 3 et 4 créent des sons qui se dégagent de la structure harmonique. Deux méthodes sont ici proposées (parmi de multiples autres) pour construire un spectre inharmonique avec une sensation de hauteur imprécise. La première consiste à empiler des valeurs de fréquence toute dans multiple d'un même rapport non harmonique. La seconde propose un choix arbitraire de valeurs.

Suggestions pour varier le patch :
Changer les fréquences des 5 composantes dans un message. Le choix peut se faire à l’oreille ou en utilisant différents systèmes de calcul et de relations.
Augmenter le nombre de partiels en prenant soin de bien maîtriser l’amplitude générale.
On peut se reporter à la Elektronishe Studie 2 de Karlheinz Stockhausen, qui en 1958 construit des "complexes" de 5 fréquences, formés par l'addition d’un intervalle unique n’appartenant pas à la gamme musicale traditionnelle.



Spectre harmonique (Super-Collider)

var fond = 110; // fondamentale à 110Hz var nharm = 10; // nombre d'harmoniques // fonction créant 10 oscillateurs pour chacune des fréquences, avec une intensité égale
{
Mix(SinOsc.ar(fond *(1..nharm),0,1/nharm))}.play;
)


La fonction SinOsc.ar (oscillateur sinusoïdale) est évaluée 10 fois (variable nharm). La fondamentale (variable fond) est multipliée par le n° de l'harmonique. L'expression (1..nharm) renvoie une valeur allant de 1 à 10. L'intensité d'une valeur de 1 par défaut est divisée par le nombre d'harmoniques, ce qui nous donne donc 10 oscillateurs d'intensité 0,1 chacun. (dépasser la valeur 1 provoque des saturations).
La fonction Mix permet de fusionner l'ensemble des 10 occurences de SinOsc.

Spectre inharmonique (Super-Collider)
(
// tableau de 10 fréquences en relation inharmoniques
var inharm = [200,320,597,800,812,825,1000,1325,1358,1895];
{Mix(SinOsc.ar(inharm, 0, 0.1));
}.play
)


La variable inharm est un tableau de 10 fréquences. Elle est passée à la fonction SinOsc comme argument pour la fréquence. La fonction Mix permet d'additionner les partiels.



Contrôler les intensités
[Télécharger les exemples 3a-3b]
 
Afin d'affiner le résultat sonore d'une synthèse additive, il est indispensable d'opérer, en plus du travail sur les fréquences, un contrôle des intensités de chaque partiel ou harmonique. Plus que d'attribuer une intensité propre à chaque partiel, ces opérations sont encore plus intéressantes si elles conduisent aussi à faire évoluer celles-ci dans le temps.

Évolution de la forme d'onde en fonction d'un jeu en temps réel sur les intensités des huit premières harmoniques (pure data).


Le contenu harmonique conditionne la forme d'onde résultante ainsi que le timbre perçu.
À l'aide des 8 curseurs, on dose l'intensité relative de chaque harmonique (de H1 à H8). le message sinesum rempli la table Forme, qui est ensuite est lue à la fréquence désirée par l'objet tabosc4~.

Percussion-résonance inharmonique (Csound) [Exemple 3-b]

La fonction line (étiquette kamp dans notre exemple) permet de spécifier une variable évoluant au cours du temps. Elle réclame 3 arguments : valeur 1, temps, valeur 2. Elle produit une rampe qui glisse linéairement de la valeur 1 à la valeur 2 pendant le temps défini en secondes par second argument. Dans notre cas, kamp glisse de la valeur d'amplitude imax (définie à la ligne précédente) à 0 pendant le temps p3 fixé dans le score et qui représente la durée de l'événement. Cela crée une enveloppe décroissante du type percussion-résonance. Remarque : Se reporter exemples 1 & 2 pour comprendre l'usage de 0dbfs utilisé dans la définition de imax
La fonction line d'étiquette kamp spécifie alors l'amplitude que nous appliquons à l'oscillateur (étiquette a1, fonction oscili)

Écouter  l'exemple 3-b

Suggestions pour varier le programme : changer les fréquences et les durées dans le score. Faire varier les valeurs de p2, (dans l'exemple toutes à 0) afin de faire débuter chaque note avec un décalage. Augmenter le nombre de partiels dans le Score. Attention dans ce cas, il faut bien maîtriser l'amplitude. Dans la partie Instruments diviser 0dbfs par une valeur égale au nombre de partiels dans la définition de imax.


Contact : poser des questions ou émettre des suggestions.

Modèle soustractif / Modulation de fréquence / Granulations / Modèles physiques / Synthétiseurs analogiques