Téléchargez ICI les instruments et les fichiers audio qui accompagnent ce chapitre.
Csound est un programme de synthèse sonore versatile et
très puissant. Avec plus de 450 modules
de traitements sonores à sa disposition, l'utilisateur
de Csound possède les outils pour modéliser
n'importe lequel des synthétiseurs
ou des multieffets disponibles sur le marché.
Csound transforme un ordinateur personnel en une
station de traitement audionumérique haut de gamme — s'y rejoignent les univers de la
création sonore, de la recherche acoustique, de la production
audionumérique, et de la composition assistée
par ordinateur. Cependant, il en est de Csound comme de tout
autre instrument : une pratique assidue et du talent
sont requis pour acquérir une réelle
virtuosité. Vous découvrirez bientôt que Csound
est l'instrument de musique le plus sophistiqué qui soit. Mais
vous devez pratiquer! La récompense de votre engagement
sera la production de timbres et de textures d'une
beauté peu commune. Avec Csound, la connaissance
et l'expérience sont la clé...et votre
imagination, la seule limite.
Ce chapitre est conçu comme un parcours
d'initiation à Csound. Le long du
chemin, nous étudierons de nombreuses techniques
de traitements et de synthèses sonores,
et nous verrons comment elles sont implémentées
dans Csound. Je vous encourage à
rendre, écouter, étudier
et modifier chacun des simples instruments présents
dans ce tutoriel. Ce faisant, vous acquérirez
une claire compréhension du
langage Csound, et des bases solides pour construire
votre propre librairie d'instruments. De plus, travailler
les bases exposées ici vous permettra
d'apprécier et d'appliquer les modèles
de traitements et de synthèses sonores plus
avancés, présentés par mes
collègues et amis dans les chapitres suivants de
ce livre.
Le CD-ROM qui accompagne ce texte contient des milliers d'instruments
et des centaines de compositions Csound.
Chacun ouvre une porte sur l'un
des nombreux mondes de Csound. En fait, une vie
entière serait nécessaire
pour explorer pleinement chacun d'eux. Une approche
possible serait de compiler tous les orchestres
présents dans le CD-ROM, de sélectionner
ceux qui vous semblent les plus intéressants,
et de les sampler afin de les utiliser dans
vos compositions. Cette librairie serait juste une
collection de sons uniques, et votre chemin serait
à son terme.
Cependant, je conseille de lire, de rendre, d'écouter
les exemples donnés, et ensuite
d'étudier les techniques de traitements
et de synthèses sonores qui
vous séduisent le plus, en modifiant
les orchestres Csound qui en font usage. Vous appliquerez
ensuite ces nouvelles connaissances dans vos
compositions — vos propres
"paysages et collages sonores". Au cours de cet apprentissage
actif, vous commencerez à construire votre
propre librairie Csound, et en fin de compte votre
propre voie.
Afin de suivre le chemin que je propose, vous aurez besoin de
comprendre la structure et la syntaxe
du langage Csound. Avec cette connaissance,
je vous crois capable de transcrire
vos expériences sonores
intimes dans de beaux et originaux instruments Csound,
et dans de vivantes sculptures sonores réellement
uniques.
A cette fin, nous allons commencer par apprendre la structure
et la syntaxe du langage avec lesquelles
sont élaborés, dans un format texte,
les fichiers "orchestre" et "partition"
. Nous poursuivrons ensuite par l'exploration
d'une variété d'algorithmes de synthèses
et de techniques de programmation propres à
Csound. Pour finir, nous aborderons quelques
exemples de traitements sonores. En chemin, nous
étudierons quelques concepts de base de
numérisation, et apprendrons quelques astuces
de programmation. Pour faciliter la compréhension
des algorithmes et du chemin du signal,
nous représenterons les instruments Csound
sous forme de diagrammes. De plus, je vous donnerais
des exercices qui vous aideront à comprendre
pleinement les diverses façons de "travailler"
avec le programme.
Ne sautez pas les exercices. Et ne vous contentez pas de les
lire. Faites-les ! Ils vous permettront
d'acquérir l'aisance
de ce langage. En fait, vous pourriez être
surpris de constater que ces exercises
vous "enseignent" plus sur la manière
de "travailler" avec Csound que les descriptions
littéraires qui les précèdent.
Arrivés au terme de ce premier chapitre,
vous devriez posséder les connaissances
requises pour élaborer votre propre librairie
de sons Csound, et le chemin vous sera ouvert
pour aborder les chapitres suivants.
Ainsi, suivez les instructions du CD-ROM; installez le programme
Csound sur votre ordinateur, rendez
et écoutez quelques orchestres
tests pour être sûr que tout fonctionne
correctement; et alors, lancez-vous!
La nature de Csound, et ses principes de base
Csound est un compilateur musical logiciel ou "renderer".
Dans un premier temps, Csound traduit
les instruments conçus textuellement par l'utilisateur
dans le fichier "orchestre". Puis il joue
ces instruments en interprétant
une liste de notes-événements,
que le programme peut "lire" soit à partir d'un fichier
"partition" rédigé au format
texte, soit à partir d'un fichier MIDI généré
par un séquenceur. Il est aussi
possible de fournir les différents paramètres
des notes-événements en temps-réel,
par le biais de contrôleurs MIDI ou à
partir d'un fichier audio, ou avec un dispositif non-MIDI
tel qu'un clavier ASCII ou une souris.
Selon la puissance de l'ordinateur (et la complexité des instruments
de votre fichier "orchestre") la performance de la "partition"
peut être écoutée
en temps-réel, ou écrite
directement sur le disque dur
dans un fichier audio. Cette suite d'opérations
est dénommée "sound rendering",
par analogie avec le concept de l'"image rendering"
propre au domaine du graphisme.
Une fois rendu, vous écouterez le fichier audio en l'ouvrant
avec votre éditeur audio préféré,
et le jouerez en utilisant
le convertisseur numérique/analogique
(CNA) de votre carte-mère ou de votre
carte son.
Ainsi, avec Csound, nous travaillons essentiellement avec deux fichiers texte interdépendants et complémentaires, le fichier "orchestre" et le fichier "partition". Ces fichiers sont nommés librement par l'utilisateur. Dans la pratique, nous donnons aux deux fichiers un nom identique, différenciés alors par leur extension — .orc pour le fichier "orchestre" et .sco pour le fichier "partition" (sco pour l'abréviation de "score"). Dans ce chapitre j'ai nommé les fichiers d'étude : etude1.orc et etude1.sco, etude2.orc et etude2.sco, etude3.orc et etude3.sco, etc. Chacune de ces études d'orchestre contient six instruments (instr 101 — 106, instr 107 — 112, instr 113 — 118 , etc.). A partir de ces études, j'ai individualisé chacun des instruments pour qu'il vous soit plus facile d'expérimenter. Ces fichiers d'étude portent le nom du numéro de l'instrument (101.orc et 101.sco, 102.orc et 102.sco, 103.orc et 103.sco, etc.). Faire correspondre le nom des fichiers "partition" et des fichiers "orchestre" vous aidera à garder une librairie organisée, et je vous recommande vivement de procéder ainsi. Tous les fichiers "partition" et "orchestre" du Csound book et du CD-ROM qui l'accompagne suivent cette convention.
Le Fichier
"Orchestre"
Le fichier "orchestre" comprend deux sections : une section entête
et une section instruments.
La Section Entête
Dans la section entête vous définissez le taux d'échantillonnage (sr) et le taux de contrôle (kr) auxquels les instruments seront rendus, ainsi que le nombre de canaux de sortie (nchnls). L'entête du fichier "orchestre" que nous utiliserons tout au long de ce texte se présente ainsi :
sr
=
44100
kr
=
4410
ksmps
=
10
nchnls
=
1
Figure 1.1 l'entête
par défaut de Csound
Le code de cette entête définit un taux d'échantillonnage à 44100 Hz (44.1 Khz), un taux de contrôle à 4410 Hz, avec un rapport des deux égal à 10 (ksmps = sr/kr). Le nombre de canaux de sortie étant fixé à 1, le fichier audio rendu par cet orchestre sera en mono (si nous voulions rendre un fichier audio stéréo, nous fixerions simplement la valeur de nchnls à 2).
La Section Instruments
Dans l'environnement Csound, les instruments sont connectés les uns aux autres comme autant de "modules" ou opcodes qui soit génèrent des signaux, soit les modifient. Ces signaux sont représentés par des symboles, des vignettes (labels), ou par des noms de variable qui peuvent être "patchés" d'un opcode à l'autre. Chacun des instruments est numéroté et délimité par ces déclarations : instr et endin. Le nombre d'instruments à l'intérieur d'un orchestre n'est pas limité. En fait, dans Csound "tout" est instrument — vos 8000 voies de sampling, vos 4000 voies de synthèse FM, vos 2000 voies de synthèse par guides d'ondes, vos 1000 bandes EQ, vos 500 canaux de mixage automatisés, vos 250 lignes de délai, n'importe quoi... Pour Csound, ces éléments de synthèse, de traitement de signaux, sont simplement instr 1, instr 2, instr 3, instr 4, etc.
La Syntaxe De l'Orchestre
Dans le fichier "orchestre" de Csound,
la syntaxe utilisée pour définir un opcode
est la suivante :
Sortie
Opcode
Arguments,
... , ...
; Commentaires (optionnels)
Si nous prenons l'exemple
de l'opcode oscil,
nous avons la syntaxe suivante :
Sortie
Amplitude
Fréquence
F-table
#
; Commentaire
a1
oscil
10000,
440,
1
; oscillateur
Création Sonore Etude 1: Un Orchestre composé de Six Instruments
Dans notre premier fichier orchestre l'instr 101 utilise l'opcode oscil, un oscillateur à lecture de table, pour calculer une sinusoïde à 440 Hz, d'amplitude 10000. La figure 1.2 shématise l'instr 101 , et la figure 1.3 présente le code de cet intrument.
Figure 1.2 Diagramme de l'instr 101, un simple oscillateur à lecture de table, de fréquence et d'amplitude fixes.
instr 101
;OSCILLATEUR SIMPLE
a1
oscil
10000, 440, 1
out
a1
endin
Figure 1.3 Code pour l'instr 101, un simple oscillateur à lecture de table, de fréquence et d'amplitude fixes, l'opcode oscil.
Le diagramme de l'instr 101 montre clairement comment la sortie de l'oscillateur (a1) est "patchée" dans l'entrée de l'opcode out qui écrit le signal sur le disque dur.
Csound rend les instruments ligne par ligne, et de haut en bas. Les entrées sont situées à droite de l'opcode, et les sorties à gauche. Les mots qui suivent un point-virgule, considérés comme commentaires, ne sont pas pris en compte dans le calcul.
Pour l'instr 101 (figure 1.3), les arguments d'entrée de l'oscillateur sont fixés à 10000 (amplitude), 440 (fréquence) et 1 (numéro de la table de fonction contenant la forme d'onde que l'oscillateur "lit"). L'opcode de l'oscillateur rend le son 44100 fois par seconde avec ces paramètres, et écrit le résultat dans la variable a1. La valeur des échantillons inscrite dans la variable locale a1 peut alors être lue comme une entrée par les opcodes suivants, tel que l'opcode out. Ainsi, les noms de variables fonctionnent comme les "patchs d'accords" d'un synthétiseur analogique traditionnel. Avec ces "patchs d'accords virtuels", chacun peut diriger les signaux audio et de contrôle vers n'importe quel autre opcode les utilisant comme paramètres d'entrée. Cela permet de contrôler dynamiquement un paramètre (l'équivalent de tourner un bouton) durant le cours d'une note, ou de fournir des données audio à un opcode de traitement sonore.
Dans la figure 1.4, vous pouvez constater que les instr 102 — 106 utilisent le même motif que l'instr 101 (un générateur de signal écrivant sur le disque dur). Nous avons remplacé l'opcode oscil par des opcodes de synthèse plus puissants, comme foscil — un simple synthétiseur FM à 2 oscillateurs, buzz — qui produit un ensemble de "cosines" possédant un lien harmonique, pluck — un simple synthétiseur par guides d'ondes basé sur l'algorithme Karplus-Strong, grain — un synthétiseur granulaire asynchrone, et loscil — un synthétiseur à table d'ondes qui lit les samples en boucle.
instr 102
;SIMPLE
FM
a1
foscil
10000, 440, 1, 2,
3, 1
out
a1
endin
instr 103
;SIMPLE
BUZZ
a1
buzz
10000, 440,
10, 1
out
a1
endin
instr 104
;SIMPLE
MODELAGE PHYSIQUE
a1
pluck
10000, 440, 440,
2, 1
out
a1
endin
instr 105
;SIMPLE
GRANULATION
a1
grain
10000, 440, 55, 10000,
10, .05, 1, 3, 1
out
a1
endin
instr 106
;SIMPLE LECTURE D'UN SAMPLE
a1
loscil
10000, 440, 4
out
a1
endin
Figure 1.4 Diagrammes et codes de l'orchestre pour les instr 102 — 106, une série d'instruments à fréquences et amplitudes fixes qui utilisent différentes techniques de synthèse pour produire une seule note de même amplitude (10000) et de même fréquence (440).
La structure identique de ces générateurs de signaux apparaît clairement. Mais lorsque nous écoutons le rendu de chacun, nous percevons leurs sons comme tout à fait uniques. Bien qu'ils partagent une même fréquence de 440 Hz et une amplitude de 10000, l'algorithme de synthèse utilisé par chacun des opcodes est fondamentalement différent — exigeant la spécification d'un ensemble de paramètres qui leurs sont propres. En fait, ces six opcodes générateurs de signaux (oscil, foscil, buzz, pluck, grain et loscil) sont au coeur des techniques de synthèse proposées par les plus populaires des synthétiseurs présents sur le marché. On peut dire que dans Csound, un seul opcode est un synthétiseur complet! D'accord...peut-être moins excitant et versatile, mais...combiné avec d'autres opcodes, Csound peut, et en effet vous emmènera plus loin que toute implémentation commerciale.
Le Fichier "Partition"
Regardons à présent le fichier "partition" qui "joue" cet orchestre d'instruments. Comme le fichier "orchestre", le fichier "partition" a deux sections : les tables et les notes. Dans la première section, nous utilisons des sous-programmes (les GENS) pour directement "générés" des tables-fonctions ("f-tables") et/ou pour remplir ces tables de fichiers audio "lus" depuis le disque dur. Dans la seconde partie, nous écrivons les notes-événements ou déclarations de notes (appelés aussi i-statements). Ces notes-événements "jouent" les instruments et leur transmettent les paramètres de jeu tels que les fréquences, les niveaux d'amplitude, les taux de vibrato, et la durée des attaques (chacun de ces paramètres de jeu constitue un "p-fields").
Les sous-programmes GEN
Dans Csound, les sous-programmes qui génèrent des fonctions sont appelés GENS. Chacun d'eux (plus de 20) est optimisé pour calculer une catégorie spécifique de fonctions ou tables d'onde. Par exemple, les sous-programmes GEN5 et GEN7 sont utilisés pour tracer des fonctions composées de segments de courbes exponentielles et de lignes droites; les sous-programmes GEN9 et GEN10 génèrent des formes d'onde complexes constituées d'une somme de simples sinusoïdes pondérées; le sous-programme GEN20 génère des fenêtres standards tels que les fenêtres "Hanning" et "Kaiser" qui sont traditionnellement employées pour l'analyse spectrale et l'enveloppe des grains; le sous-programme GEN21 produit des tables avec différentes distributions aléatoires telles que Gaussian, Cauchy et Poisson; et le sous-programme GEN1 transfère les données d'un fichier audio préenregistré dans une table, données qui seront traitées ensuite par l'un des opcodes de Csound, tel que l'oscillateur loscil, dont la fonction est de lire ce type de fichiers en boucle.
La définition des tables-fonctions, ainsi que leur utilisation par les instruments de l'orchestre, est laissée à votre entière liberté — le designer de sons. Quelquefois, c'est une question de bon sens. D'autres fois une question de préférences ou d'habitudes. Par exemple, l'instr 106 utilise un oscillateur qui lit des samples en boucle, loscil. J'ai choisi GEN1 pour charger un sample dans l'orchestre. Pour l'instr 102, utilisant l'opcode foscil, j'aurais pu choisir de moduler les fréquences de deux formes d'onde quelconques, mais j'ai opté pour une approche traditionnelle et modulé deux sinusoïdes définies par GEN10.
La Syntaxe Du Fichier "Partition"
Dans le fichier "partition", la syntaxe pour définir une fonction est la suivante :
f
numéro
temps
d'initialisation
taille
de la table
GEN
Sous-programme
paramètre1
paramètre2...
;
commentaire
Si nous voulons générer une sinusoïde de 16 points, nous devons écrire la déclaration de table (ou f-statement) suivante :
f
101
0
16
10
1
; une sinusoïde
Alors, la table 101 génèrera la fonction de la figure 1.5.
Figure 1.5 Une table de 16 points traçant une sinusoïde, définie par GEN10 avec les arguments: f 101 0 16 10 1
Comme vous pouvez le voir, une sinusoïde dessinée avec une résolution de 16 points n'est pas particulièrement lisse. La plupart des tables doivent avoir une longueur dont le nombre de points est un " pouvoir-de-2". Pour des ondes synthétisées, nous définissons typiquement des tables allant de 512 (5K) à 8192 (8K) points. Dans notre première partition, etude1.sco, nous définissons les fonctions suivantes en utilisant GEN10, GEN20 et GEN1:
f1
0
4096
10
1
f2
0
4096
10
1 .5 .333 .25 .2
.166 .142 .125 .111 .1 .09 .083 .076 .071 .066 .062
f3