Open Music et CSound: un exemple d’interaction
J’ai, lors d’un précédent article, présenté le synthétiseur CSound qui reste après cinquante-huit ans d’existence, le système le plus puissant et le plus flexible de l’histoire de la synthèse sonore. Gratuit et fonctionnant aussi bien en différé qu’en temps réel, ses limites sont celles de votre imagination.
Open Music est un logiciel beaucoup plus récent qui est né dans les années 1997-98 à l’IRCAM dans l’équipe de Gérard ASSAYAG, Carlos AGON et Jean BRESSON.
Il se présente comme un ensemble de patchs visuels où l’on peut connecter entre-elles des « boites », des « modules » qui représentent autant de processus musicaux, de l’élémentaire au plus complexe.
Les deux logiciels peuvent être téléchargés gratuitement. Je donne les liens à la fin.
Les données peuvent être représentées de différentes façons: courbes, qu’on appelle BPF et partitions mesurées (VOICE) ou proportionnelles(CHORD-SEQ).
Je ne présenterai pas d’avantage Open Music car d’excellentes présentations et tutoriels existent que l’on peut consulter et télécharger sur les site de l’IRCAM et sur celui de Didier Debril.
De la partition à la synthèse sonore: un exemple simple
Je vais présenter un patch très simple qui produit une texture sonore d’une dizaine de secondes.
Si vous voulez le reproduire il faut, au préalable, charger la librairie OM2Csound écrite par Karim Haddad:
Open Music 6.9 et CSound 6.03.
On voit ici des boites écossaises rouges, qui contiennent d’autres boites(fonctions) connectées entre elles et à des fonctions élémentaires comme: instrument0, csound-synth, auto-editsco etc…
On va détailler de gauche à droite et de haut en bas toutes ces fonctions en commençant par les ouvrir quand ce sont des patchs rouges.
Wave
La première à gauche s’appelle « wave » la voici ouverte:
Ici on génère la forme d’onde du son utilisé, son timbre.
J’ai emprunté ce patch au tutoriel de la librairie OM2CSound. On voit tout en haut une courbe(bpf) qui indique à CSound la force des partiels en y et leur rang en x. Pour résumer: plus on va vers la droite et plus c’est aiguë; plus on monte et plus c’est fort. On voit ici que les partiels graves prédominent avec une chute très rapide dans l’aiguë.
La petite boite à gauche, qui s’appelle inharm-ser, génère de l’inharmonicité. C’est, en gros, une fonction qui désaccorde les partiels entre-eux avec, ici, un index de 1,15; 1 étant l’harmonicité pure. Vous pouvez monter cet index, plus il sera fort et plus vous obtiendrez un timbre qui se rapprochera, pour la forme d’onde, d’un timbre de cloche.
La boite sampler, échantillonne(découpe, sample…) la courbe bpf d’Open Music en 24 intensités de partiels au format des tables CSound. On voit ensuite om-random et repeat-n qui génèrent les phases de chaque partiels: on peut expérimenter avec des valeurs de 0 à 360°.
Pargen09 et table écrivent les données de table d’onde dans un format lisible par Csound.
GEN09 est ici la routine CSound qui génère une table d’onde en synthèse additive avec 3 paramètres pour chaque partiel: rang du partiel(multiple de la fondamentale qui ici n’est pas nécessairement un nombre entier), intensité du partiel (peut être un nombre négatif, auquel cas la phase est inversée), phase du partiel(0-360°).
Ce patch génère des suites de nombres qu’il serait très fastidieux et peu efficace d’écrire à la main:
((f 1 0 1024 9 1.0 0.001 0.9182447 2.219 0.001 0.6897199 3.537 0.001 0.6113447 4.925 0.0 0.6652547 6.365 0.0 0.3554945 7.85 0.0 0.8766235 9.373 0.0 0.9482641 10.928 0.0 0.58618796 12.514 0.0 0.2808299 14.125 0.0 0.39915335 15.762 0.0 0.38688743 17.42 0.0 0.94945407 19.1 0.0 0.0014913082 20.799 0.0 0.3438592 22.517 0.0 0.4091015 24.251 0.0 0.5836345 26.003 0.0 0.7923231 27.769 0.0 0.005970478 29.551 0.0 0.15250862 31.346 0.0 0.2017355 33.155 0.0 0.28640616 34.977 0.0 0.3795892 36.812 0.0 0.059866548 38.658 0.0 0.8127302))
Enveloppes
Ce sous-patch contient diverses formes d’enveloppe d’amplitude (la forme du son) dans des bpf. Vous pouvez connecter l’une ou l’autre à l’entrée la plus à gauche de pargen57 qui génère, avec la fonction table des tables d’enveloppe au format CSound.
Je vous conseille de garder tous ces paramètres, pour l’instant, sauf la connexion des bpf qu’il est intéressant de changer pour écouter les différentes enveloppes.
Instrument0
La fonction instrument0 génère le score CSound proprement dit. Ce score comporte six paramètres (p-fields) qui sont, de gauche à droite: p1, le numéro de l’instrument (ici 1); p2, la liste des onsets (moment d’apparition de chaque note en secondes); p3, la liste des durées de chaque note(en secondes); p4, la liste des amplitudes; p5,la liste des hauteurs de chaque note(en Hz); p6, le panoramique global de toute la séquence(de 0 à 1) 1 étant la gauche et 0 la droite.
Soit le score suivant au format CSound:
;p1 p2 p3 p4 p5 p6
i 1 .0000 .0100 2781 5000 1.0000
i 1 .1063 .0514 6157 4963 .9870
i 1 .1865 .1757 3754 4926 .9750
i 1 .3264 .0929 4793 4889 .9620
i 1 .4302 .2171 1142 4852 .9500
i 1 .5103 .0929 9420 4815 .9370
i 1 .5645 .1343 10950 4778 .9250
i 1 .7260 .0514 1283 4741 .9120
i 1 .8197 .0929 5368 4704 .9000
….
Onsets
Un double-clic sur la boite onsets ouvre la fenêtre ci-dessus.
Les onsets sont les dates d’apparition, ou de déclenchement, de chaque note exprimées en secondes pour CSound.
On y voit la fonction expand-lst qui génère une liste de nombres espacés de 0.1 secondes de 0 à 8.
La fonction perturbation lui affecte une modification aléatoire sur chaque onset de 10% (0.1)
Soit 81 notes:
(0.0 0.0907 0.186 0.3143 0.3832 0.4954 0.6137 0.7122 0.8283 0.8857 0.9341 1.1484 1.1156 1.3895 1.3932 1.6301 1.7294 1.6778 1.852 1.8545 2.1636 2.2493 2.2874 2.5049 2.497 2.6157 2.7301 2.7566 2.8429 2.9168 3.0849 2.9087 2.9256 3.6013 3.1566 3.4779 3.3952 3.534 3.6044 4.0816 3.956 4.1413 3.9537 4.088 4.3462 4.9489 4.2598 4.6022 4.437 4.923 4.6029 4.9417 5.5126 5.2786 5.594 5.0669 5.1579 6.1345 6.0997 6.1004 6.4679 6.5025 6.0881 6.7602 6.6823 7.0549 6.4705 6.4094 6.7654 6.2982 6.7205 7.1805 6.7219 7.2755 7.0355 7.7342 7.1111 7.8926 8.2812 8.4321 8.2102)
On voit que la dernière note arrive à 8,2102 secondes du début de la séquence.
La fonction om-round arrondit les résultats à 4 décimales afin de ne pas encombrer inutilement le score de CSound. Elle se trouve dans presque toutes les boîtes et avec les mêmes paramètres. Je ne reviendrai donc pas dessus.
Durs
Ici on génère les durées de chaque note.
On voit tout de suite que cette boîte possède une entrée que j’ai appelée onsets. Comme son nom l’indique cette entrée reçoit la sortie de la boîte onsets. La fonction length retourne la longueur de la liste d’onsets et permet de générer un nombre de durées équivalent soit, ici, 81.
La fonction expand-lst génère une liste de huit nombres entiers de 1 à 8.
Nth-random choisit, pour chaque note, une valeur au hasard dans cette liste. Les durées seront donc comprises entre 1 et 8 secondes.
Om-scale permet de changer l’échelle de ces durées pour produire des sons très courts, staccato, ou des durées qui se chevauchent pour produire des textures plus fluides. Je vous recommande particulièrement d’expérimenter avec les paramètres de cette fonction.
Amps
Cette boîte produit les amplitudes de chaque note de façon aléatoire entre 1000 et 20000.
Ces valeurs se situent dans la fourchette des valeurs d’amplitude de CSound qui va, traditionnellement, de 0 à 32768. De toutes façons les amplitudes sont normalisées à la sortie, ce qui fait que vous pouvez écrire ici à peu près n’importe quelles valeurs. L’étendue 0 à 32768 constitue néanmoins un bon choix, de façon générale.
Pitchs
Cette boîte fournit les hauteurs de note. Ici on est dans l’aiguë entre 5000 et 2000 Hertz.
Les hauteurs sont exprimées en Hertz. A gauche se trouve une fonction expand-lst qui retourne 82 valeurs entre 5000 et 2000 Hertz par pas de -37 Hertz.
En haut à droite l’entrée fournit, comme dans les boîtes précédentes, la liste des onsets dont la longueur est retournée par la fonction length ce qui permet d’avoir le bon nombre de valeurs aléatoires entre 100 et 800 Hertz calculées par les fonctions om-random et repeat-n. Il faut connecter cette dernière à la sortie si l’on veut ce type de valeurs.
Panoramique
Ici c’est le panoramique gauche-droite que l’on contrôle.
En haut à droite du patch principal on trouve une bpf connectée à une fonction om-sample qui la découpe en 81 valeurs entre 0 et 1; 1 étant la gauche et 0 la droite en y.
Orchestra
Au milieu à droite du patch, à l’intérieur d’un textfile se trouve le fichier .orc, l’orchestre destiné à CSound:
sr= 44100
kr= 44100
ksmps= 1
nchnls= 2
instr 1
idur = p3
iamp = p4
ifq = p5
ipan = p6
k1 oscil1 0, 1, idur, 2
asig oscili iamp,ifq,1
asig = asig*k1
outs asig*ipan, asig*(1-ipan)
endin
Comme on peut le voir, si on connait un peu CSound, il est très simple, minimal même.
L’orchestre, comme son nom l’indique, c’est le coeur de CSound, là où on définit les processus de synthèse mis en œuvre.
Le score est, comme son nom l’indique, la partition, les notes et instructions qu’on donne à jouer à cet orchestre.
L’idée derrière le contrôle de CSound par Open Music est d’utiliser des orchestres simples et générer des scores complexes.
En effet, dans l’exemple ci-dessus, seul le score est généré par Open Music. L’orchestre est écrit à la main.
Vous pouvez copier-coller l’orchestre ci-dessus dans un textfile sans oublier de sauver le fichier avec le suffixe .orc.
Auto-editsco
J’ai bien cherché, mais je n’ai pas trouvé la fonction auto-editsco dans les menus. Elle est pourtant bien présente dans le dictionnaire Open Music.
Pour la trouver il suffit donc de faire double-clic dans le patch principal et de taper son nom.
Cette fonction permet juste de sauter l’étape d’écrire le nom du fichier .sco puis le renvoyer à CSound. Elle simplifie donc la synthèse dans une seule évaluation de la boite sound tout en bas du patch.
Score
On peut connecter la sortie de auto-editsco à un textfile pour vérifier à quoi ressemble le score, pour debuguer etc…
Cette étape n’a pas d’incidence sur la sortie sonore.
Csound-synth
Cette fonction représente le processus de synthèse lui-même. Elle réunit l’orchestre et le score et on peut définir le nom du fichier audio qui sera calculé.
On sélectionne la boite sound et on presse la touche v ou on clique sur une des sorties de la boîte.
La synthèse est assez rapide et la console de CSound apparait dans le listener d’Open Music pour un éventuel debugage.
Amélioration du patch: multi-enveloppes
On va complexifier progressivement ce patch en le faisant évoluer vers un deuxième patch qui va permettre de sélectionner une enveloppe différente par note, de façon aléatoire ou déterministe.
Les seuls éléments qui changent sont la boîte enveloppes, le fichier .orc et une nouvelle boite qui va écrire dans le score les paramètres de choix d’enveloppes.
Enveloppes
La fenêtre est presque la même, si ce n’est que toutes les bpf sont indexées et inscrites dans des tables pour rappel ultérieur via le score.
Dans le cas ou l’on ne désire pas certaines bpf il suffit de les déconnecter de la fonction x-append ou même de les effacer. Le patch et le score s’adapteront automatiquement.
Voici la boucle omloop qui attribue automatiquement un index à chaque table quelque soit leur nombre:
Choix enveloppes
La boîte choix enveloppes tire au hasard une enveloppe différente pour chaque note parmi toutes celles disponibles.
Elle reçoit pour ça deux arguments: le nombre de notes et les index d’enveloppe disponibles:
Plutôt que du hasard, on peut très bien imaginer un choix déterminé d’enveloppes spécifié par le compositeur de façon algorithmique ou au note-à-note.
La qualité du résultat n’en sera que meilleure.
Orchestre
Le fichier orchestre comporte un paramètre supplémentaire ienv, de même que la fonction instrument0 une entrée de plus dans le patch principal.
sr= 44100
kr= 44100
ksmps= 1
nchnls= 2
instr 1
idur = p3
iamp = p4
ifq = p5
ipan = p6
ienv = p7 ; paramètre supplémentaire pour le choix d’enveloppes
k1 oscil1 0, 1 ,idur,ienv
asig oscili iamp,ifq,1
asig = asig*k1
outs asig*ipan,asig*(1-ipan)
endin
Il faut de nouveau copier-coller cet orchestre dans la boîte textfile que l’on n’oubliera pas de sauver avec un nouveau nom et son suffixe .orc.
On donne un nouveau nom au fichier audio à csound-synth et on évalue la boîte sound.
Maintenant, chaque « note » possède sa propre enveloppe. Il faudra certainement retravailler la façon dont sont choisies ces enveloppes et la forme des enveloppes elles-mêmes.
A vous de jouer.
Le prochain article améliorera un peu plus ce patch en lui ajoutant du bruit, de la reverb et du délai.
(A suivre…)
Jean-Michel Darrémont
Liens
- CSound, un incroyable système de synthèse sonore mon précédent article en introduction à CSound
- Site Officiel de CSound Téléchargement gratuit, FAQs, manuels, examples de codes, programmes graphiques associés, etc… La mailing list et son archive est un bon endroit pour trouver des informations détaillées.
- Open Music Home le site d’OM et de l’Équipe de Représentations Musicales de l’IRCAM
- Téléchargement d’OPEN MUSIC logiciel gratuit y compris la librairie OM2CSound