open music

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.

open music

 

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:

open music

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.

open music

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

open music

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.

open music

 

Pitchs

open music

 

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.

open music

 

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.

open music

 

Enveloppes

open music

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:

open music

 

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:

open music

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

 

%d blogueurs aiment cette page :