open music

Open Music et CSound: interaction améliorée

Nous allons développer le patch et l’interaction Open Music-CSound que nous avons abordés dans l’article précédent, d’abord en rajoutant réverb et delay, puis en ajoutant une composante de bruit filtré.

Open Music 6.9 et CSound 6.03.

Ajout de la réverb et du delay

open music

 

On remarque, par rapport au patch précédent, l’ajout de quatre boîtes: Le reste du patch n’a pas changé.

Ça nous rappelle, évidemment, la gestion des effets sur une console de mixage avec send/return.

Commençons par l’envoi dans la réverb.

 

Reverb_send

open music2

Le processus est très simple: pour chaque note, une valeur d’envoi dans la réverb sera choisie aléatoirement entre 10% et 300% du niveau du son direct. On peut bien sûr modifier ces valeurs. C’est l’oreille qui décide.

Comme dans les sous-patchs précédents, la liste d’onsets est reçue comme argument, on en évalue le nombre pour calculer un nombre équivalent de valeurs.

Un question se pose: pourquoi gérer la réverb au niveau du processus de synthèse plutôt que de façon externe, et beaucoup plus simple, dans une DAW avec plugin, dont certains sont excellents.

Une première réponse se trouve dans le fait qu’on trouve un choix intéressant de réverbs pour CSound sur le net qui sonnent différemment de celles un peu standardisées du commerce.

La deuxième réponse est, qu’il est possible de modifier comme on le désire, jusque dans les moindres détails ces effets et de vraiment personnaliser le design sonore comme il n’est pas possible de le faire avec un plugin.

La troisième et principale réponse est que l’envoi dans la réverb se fait avec une valeur différente au niveau de chaque note. Si on place la séquence sonore sur une piste de DAW c’est toute la séquence audio qui sera réverbérée avec peut-être un contrôle dans le temps de la séquence mais pas dans le temps de chaque note. La séquence va alors sonner comme un objet sonore placé dans un environnement réverbérant, ce qui n’est déjà, pas si mal.

Le controle de la réverb au niveau de chaque note, que j’ai ici livré au hasard pour me simplifier le travail, mais qu’on peut (et qu’on doit, peut-être…) écrire de façon déterministe, en fonction de la fréquence de la note, de son amplitude, de sa date d’apparition etc…, permet de donner un rendu « 3D », si on peut dire, de la séquence avec certaines notes éloignées, d’autres rapprochées. On l’entend très bien à l’oreille et ça donne, je trouve, un rendu beaucoup plus fin à la séquence.

 

Delay_send

open music

On retrouve exactement le même processus que pour la réverb.

Les plages de valeurs ne sont pas obligatoirement les mêmes. A votre oreille de décider.

Sinon, les mêmes remarques que précédemment valent ici.

 

Retour_reverb

open music

Voici le contrôle de la réverb qui comporte 11 paramètres. Nous verrons un peu plus loin à quoi ils correspondent dans l’orchestre.

J’ai trouvé cet effet dans le CSound Book. Il est l’œuvre d’Eric Lyon.

A noter qu’il n’y a pas de niveau de retour. Le niveau se fait uniquement dans la boite

Vous pouvez utiliser ces paramètres où les changer.

 

Retour_delay

open music

Mêmes principes généraux que pour le retour réverb sauf qu’il n’y a, ici, que trois paramètres: n° d’instrument, onset et durée de l’effet.

Le n° d’instrument pour les effets est généralement choisi supérieur ou égal à 100. Il n’y a aucune obligation, mais ça laisse 100 numéros pour les générateurs (instrument 1, 2, 3 , 4 jusqu’à 99) et les effets à partir de 100. Ça évite de tout mélanger.

On remarque aussi, comme pour la réverb, qu’il n’y a qu’une seule note. Il faut le voir comme si on allumait la réverb au début (onset=0) et qu’on l’éteigne à la fin (date de la dernière note+durée de la dernière note+durée du feedback). Tous les effets, et surtout ceux avec feedback(réverb, delay, chorus, flanger etc…) sont en général gérés de cette façon dans CSound et ceci pour des raisons que je ne détaillerai pas ici.

 

Score

Si on évalue la boîte score on obtient(extrait):

;p1          p2                 p3               p4             p5                p6                p7        p8                 p9

;instr     onset           dur             amp         pitch          pan              env      revsend      delsend
i 1           .0000          .1757           11665      5000           1.0000        6          1.8157          2.3353
i 1           .1086           .2171           19654      4963            .9870         12         2.5272          .8736
i 1           .1829           .1343           2530       4926            .9750          12         1.6889          1.5003
i 1           .3285          .2586           4008       4889            .9620          2          .2994             2.2115
i 1           .3964           .2171          13649      4852            .9500          6         1.5300          1.9899

;;;Réverb return

;instr     onset           dur               speed1       speed2         speed3       speed4     freq1     freq2          freq3        freq4

i 100      0                   11.7613        .3000         .5000            1                    .7000       600       1200           1800         2400

 

;;;Delay return

i 101       0                   12.4137
e

 

Orchestre

Voici le nouvel orchestre, il est nettement plus copieux que le précédent:

 

sr= 44100
kr= 44100
ksmps= 1
nchnls= 2

;;; Initialisation de la Strange Verb d’Eric Lyon
gaverb init 0 ; réverb
giwave1 ftgen 0, 0, 8192, 10, 1
giwave2 ftgen 0, 0, 8192, 10, 1000, 0, 333, 0, 200, 0, 145, 0, 111, 0, 91, 0, 77, 0, 67, 0, 59, 0, 53, 0
giwave3 ftgen 0, 0, 8192, 10, 1000, 500, 333, 250, 200, 167, 143, 125, 111, 100, 91, 83, 77, 71, 67, 63, 59, 56, 53, 50
giwave4 ftgen 0, 0, 8192, 10, 1

;;; Initialisation du Delay
gadel init 0 ; delay
;;; INSTRUMENT PRINCIPAL
instr 1

idur = p3
iamp = p4
ifq = p5
ipan = p6
ienv = p7
irev = p8
idel = p9

k1 oscil1 0, 1 ,idur,ienv
asig oscili iamp,ifq,1
asig = asig*k1

outs asig*ipan,asig*(1-ipan)

gaverb = gaverb +(asig*irev) ; reverb send
gadel = gadel + (asig*idel) ; delay send

endin
instr 100 ; STRANGE VERB
; LYON 2316 version 2

iorig = .05
irev = 1.-iorig
igain = 1.0
ilpgain = 1.5
icgain = .1
ialpgain= 0.1
ispeed1 = p4
ispeed2 = p5
ispeed3 = p6
ispeed4 = p7
icf1 = p8
icf2 = p9
icf3 = p10
icf4 = p11
ifac = 2
ibw1 = icf1/ifac
ibw2 = icf2/ifac
ibw3 = icf3/ifac
ibw4 = icf4/ifac

; CYCLIC AMPLITUDE ENVELOPES
aenv1 oscil igain, ispeed1, giwave1
aenv2 oscil igain, ispeed2, giwave2
aenv3 oscil igain, ispeed3, giwave3
aenv4 oscil igain, ispeed4, giwave4

;BREAK INTO BANDS

a1 = gaverb
ares1 reson a1, icf1, ibw1, 1
ares2 reson a1, icf2, ibw2, 1
ares3 reson a1, icf3, ibw3, 1
ares4 reson a1, icf4, ibw4, 1

; SUM THE ENVELOPED BANDS

asum = (ares1*aenv1)+(ares2*aenv2)+(ares3*aenv3)+(ares4*aenv4)

; LOWPASS AND COMB SEQUENCE

alp tone asum, 1000
adright delay alp, .178
adleft delay alp, .215
asumr = asum+(adright*ilpgain)
asuml = asum+(adleft*ilpgain)
acr1 comb asumr, 2, .063
acr2 comb acr1+asumr, .5, .026
acl1 comb asuml, 2, .059
acl2 comb acl1+asuml, .5, .031
acsumr = asumr+(acr2*icgain)
acsuml = asuml+(acl2*icgain)

; ALLPASS COMB SEQUENCE
alpo alpass asum, 3, .085
alpol comb alpo, 2.8, .526
alpor comb alpo, 2.8, .746
alol tone alpol, 500
alor tone alpor, 500
alold delay alol, .095
alord delay alor, .11

;SUM REVERBATION COMPONENTS

arevl = (alpol*ialpgain)+acsuml+alold
arevr = (alpor*ialpgain)+acsumr+alord
aorig = a1*iorig

; MIX BACK ORIGINAL SIGNAL

outs (arevl*irev)+aorig, (arevr*irev)+aorig

gaverb = 0

endin

 

;***** GLOBAL DELAY INSTRUMENT *****
instr 101
kDelaydecay init .2
iDelaytime init 1.3

aSig delayr iDelaytime
delayw kDelaydecay * (gadel + aSig)
outs aSig + gadel, aSig + gadel

gadel = 0
endin

 

Vous pouvez le copier-coller dans le textfile destiné à l’orchestre.

Dans l’en-tête du fichier, juste après les habituelles déclarations de sample rate(sr), control rate(kr), nombre de canaux audio(nchnls), on trouve l’initialisation des paramètres de réverb et de delay auxquels on ne touche pas pour l’instant.

L’instrument1, qui n’a presque pas changé par rapport à la précédente version, comporte maintenant une ligne pour l’envoi dans la réverb dans un style récursif: gaverb = gaverb +(asig*irev) asig est le signal direct, irev le facteur d’envoi dans la réverb(si irev=0 aucun signal ne va dans la réverb) et où gaverb est le signal réellement envoyé à la « Strange Verb ». Idem pour l’envoi dans le delay (gadel = gadel + (asig*idel)).

 

Ensuite vient l’instrument réverb proprement dit que j’ai baptisé Strange Verb car elle sonne d’une façon non standard.

Elle se compose d’une bonne soixantaine de ligne que je vous laisse étudier de plus près si vous êtes intéressés par la technique audio-numérique pure. Je ne la détaillerai pas d’avantage. Vous trouverez des informations complémentaires la concernant dans le « CSound Book ». Elle est l’œuvre d’Eric Lyon.

Juste en dessous se trouve la machine à delay. Le code est très court comparativement. On pourrait d’ailleurs l’améliorer en introduisant un filtrage progressif du feedback.

Voilà. On évalue la boîte sound  et l’on entend notre son réverbéré et répété par le delay. Ne reste qu’à ajuster les paramètres « to your taste ».

 

Or, que se passe-t-il sous nos yeux atterrés et entre nos oreilles navrées???

Je vous le donne en mille…

La stéréo et le petit panoramique gauche-droite bien que toujours en activité ont disparu.

Pourquoi? Quelle est cette malédiction? Un bug?

Il se trouve que la Strange Verb tout comme le delay ne sont pas vraiment des effets stéréo car ils ne possèdent qu’une seule entrée. Ils sortent bien sur deux canaux mais ne peuvent absolument pas refléter le mouvement gauche-droite d’une source.

Ils recouvrent donc le fichier original qui se déplace de gauche à droite et rendent le mix presque mono.

A cela nous allons remédier en apportant une nouvelle amélioration au patch.

 

Des effets vraiment stéréo

Pour établir des effets vraiment stéréo il va falloir créer deux entrées qui se branchent respectivement sur la sortie gauche et sur la sortie droite de l’instrument 1.

La modification ne concerne que le fichier orchestre, le patch Open Music ne change pas. Le niveau d’envoi dans l’effet concerne les deux canaux à la fois.

Voici l’orchestre:

sr= 44100
kr= 44100
ksmps= 1
nchnls= 2

;;; Initialisation de la Strange Verb d’Eric Lyon
gaverbl init 0 ; réverb canal gauche
gaverbr init 0 ; réverb canal droit

giwave1 ftgen 0, 0, 8192, 10, 1
giwave2 ftgen 0, 0, 8192, 10, 1000, 0, 333, 0, 200, 0, 145, 0, 111, 0, 91, 0, 77, 0, 67, 0, 59, 0, 53, 0
giwave3 ftgen 0, 0, 8192, 10, 1000, 500, 333, 250, 200, 167, 143, 125, 111, 100, 91, 83, 77, 71, 67, 63, 59, 56, 53, 50
giwave4 ftgen 0, 0, 8192, 10, 1

;;; Initialisation du Delay
gadell init 0 ; delay canal gauche
gadelr init 0 ; delay canal droit

 

;;; INSTRUMENT PRINCIPAL
instr 1

idur = p3
iamp = p4
ifq = p5
ipan = p6
ienv = p7
irev = p8
idel = p9

k1 oscil1 0, 1 ,idur,ienv
asig oscili iamp,ifq,1
asig = asig*k1

asigl = asig*ipan
asigr = asig*(1-ipan)

outs asigl,asigr

gaverbl = gaverbl + (asigl*irev) ; reverb send gauche
gaverbr = gaverbr + (asigr*irev) ; reverb send droit

gadell = gadell + (asigl*idel) ; delay send
gadelr = gadelr + (asigr*idel) ; delay send

endin

 
instr 100 ; STRANGE VERB
; LYON 2316 version 2

iorig = .05
irev = 1.-iorig
igain = 1.0
ilpgain = 1.5
icgain = .1
ialpgain= 0.1
ispeed1 = p4
ispeed2 = p5
ispeed3 = p6
ispeed4 = p7
icf1 = p8
icf2 = p9
icf3 = p10
icf4 = p11
ifac = 2
ibw1 = icf1/ifac
ibw2 = icf2/ifac
ibw3 = icf3/ifac
ibw4 = icf4/ifac

; CYCLIC AMPLITUDE ENVELOPES
aenv1 oscil igain, ispeed1, giwave1
aenv2 oscil igain, ispeed2, giwave2
aenv3 oscil igain, ispeed3, giwave3
aenv4 oscil igain, ispeed4, giwave4

;BREAK INTO BANDS

a1l = gaverbl
a1r = gaverbr

aresl1 reson a1l, icf1, ibw1, 1
aresl2 reson a1l, icf2, ibw2, 1
aresl3 reson a1l, icf3, ibw3, 1
aresl4 reson a1l, icf4, ibw4, 1

aresr1 reson a1r, icf1, ibw1, 1
aresr2 reson a1r, icf2, ibw2, 1
aresr3 reson a1r, icf3, ibw3, 1
aresr4 reson a1r, icf4, ibw4, 1

; SUM THE ENVELOPED BANDS

asuml = (aresl1*aenv1)+(aresl2*aenv2)+(aresl3*aenv3)+(aresl4*aenv4)
asumr = (aresr1*aenv1)+(aresr2*aenv2)+(aresr3*aenv3)+(aresr4*aenv4)

; LOWPASS AND COMB SEQUENCE

alpl tone asuml, 1000
alpr tone asumr, 1000
adleft delay alpl, .215
adright delay alpr, .178
asuml = asuml+(adleft*ilpgain)
asumr = asumr+(adright*ilpgain)
acl1 comb asuml, 2, .059
acl2 comb acl1+asuml, .5, .031
acr1 comb asumr, 2, .063
acr2 comb acr1+asumr, .5, .026
acsuml = asuml+(acl2*icgain)
acsumr = asumr+(acr2*icgain)

; ALLPASS COMB SEQUENCE
alpo1l alpass asuml, 3, .085
alpo1r alpass asumr, 3, .085
alpol comb alpo1l, 2.8, .526
alpor comb alpo1r, 2.8, .746
alol tone alpol, 500
alor tone alpor, 500
alold delay alol, .095
alord delay alor, .11

;SUM REVERBATION COMPONENTS

arevl = (alpol*ialpgain)+acsuml+alold
arevr = (alpor*ialpgain)+acsumr+alord
aorigl = a1l*iorig
aorigr = a1r*iorig

; MIX BACK ORIGINAL SIGNAL

outs (arevl*irev)+aorigl, (arevr*irev)+aorigr

gaverbl = 0
gaverbr = 0
endin

 

;***** GLOBAL DELAY INSTRUMENT *****
instr 101
kDelaydecay init .2 ; feedback
iDelaytime init 1.3 ; delay en secondes

aSigl delayr iDelaytime
aSigr delayr iDelaytime
delayw kDelaydecay * (gadell + aSigl)
delayw kDelaydecay * (gadelr + aSigr)
outs aSigl + gadell, aSigr + gadelr

gadell = 0
gadelr = 0

endin

 

Le fichier a pris quelques lignes de plus.

Les variables d’entrée ont été doublées, comme gaverb qui devient gaverbl(entrée gauche) et gaverbr(entrée droite); gadel (entrée dans le delay) devient gadell et gadelr.

Toutes les variables d’entrée sont ainsi doublées mais pas celles de sortie qui étaient déjà au nombre de deux.

Je ne détaille pas, ce serait un peu fastidieux. Je vous recommande de comparer les deux fichiers avant et après la modification stéréo, c’est instructif. Sinon vous pouvez, dans un premier temps, l’utiliser tel quel sans vous soucier de ce qu’il y a sous le capot. C’est la musique qui compte!

J’ai légèrement modifié les réglages d’envoi dans la réverb et le delay car le rendu stéréo change le mix:

 

Maintenant, le rendu sonore est bien à nouveau stéréo comme on peut l’entendre et le voir sur la forme d’onde dans le patch Open Music:

open music

La forme d’onde à nouveau stéréo

 

Une dernière amélioration pourrait être de faire sonner le delay à l’intérieur de la réverb au lieu que les deux effets soient indépendants comme à présent. En effet le son est bien réverbéré mais pas le retour du delay et son feedback.

Il y a au moins deux façons de réaliser ça. La plus simple serait d’insérer le delay à l’entrée de la réverb, juste avant l’effet. On n’aurait plus ainsi qu’un seul retour d’effet mais avec, toujours, deux départs: reverb_send et delay_send.

Je vous laisse le soin de le réaliser si ça vous intéresse. C’est un bon exercice.

 

Dans le prochain article je vais rajouter une composante contrôlable de bruit puis divers effets en send/return et en insert pour évaluer la différence.

 

A bientôt.

(À suivre…)

Jean-Michel Darrémont

 

Liens

 

 

 

%d blogueurs aiment cette page :