OpenMusic-CSound: un template
Avec CSound comme avec tous les langages numériques d’ailleurs, pour chaque nouveau projet, on passe un temps considérable à réinventer la roue. Ré-écrire les mêmes processus d’initialisation, d’entrées/sorties, de tables d’ondes et ainsi de suite… Dans l’utilisation du couple OpenMusic-CSound la procédure de départ est même démultipliée. Dès lors, on se rend vite compte de la nécessité de créer un, ou même plusieurs templates pour rentrer plus rapidement dans le cœur du sujet: la création musicale.
J’ai donc rapidement créé plusieurs templates dont celui que je présente ici. Il doit être modifié, amélioré et adapté aux projets de chacun. Il est basé sur la synthèse par oscillateur et table d’onde d’une manière très simple.
Télécharger csound_template folder
Le fichier .orc
sr = 44100
kr = 44100
ksmps = 1
nchnls = 2;;; Initialisation du bus Reverb1 en stereo
gaverbl init 0 ; reverb canal gauche
gaverbr init 0 ; reverb canal droitgirevsend = 0.4 ; parametre global d’envoi dans la reverb utilise par le delay
;;; Initialisation du bus Delay en stereo
gadell init 0 ; delay
gadelr init 0 ; delay;;; Initialisation du bus Reverb2 en stereo
gaverb2l init 0 ; reverb canal gauche
gaverb2r init 0 ; reverb canal droitinstr 1
iamp = p4
ifreq= p5
ipan = p6
ienv = p7
idel = p8
irev = p9;;décliquage
idampattack = .003
idamprelease = .003
iduration = p3
p3 = iduration + idampattack + idamprelease
adamping linseg 0.0, idampattack, 1.0, iduration, 1.0, idamprelease, 0.0idur = p3
kenv oscil1i 0, iamp, idur, ienv
asig oscili kenv, ifreq, 1asigl = asig*(1-ipan)*adamping
asigr = asig*ipan*adampingouts asigl, asigr
gaverbl = gaverbl + (asigl*irev) ; reverb send gauche
gaverbr = gaverbr + (asigr*irev) ; reverb send droitgadell = gadell + (asigl*idel) ; delay send
gadelr = gadelr + (asigr*idel) ; delay sendendin
;***** GLOBAL DELAY INSTRUMENT *****
instr 100
kDelaydecay init .4 ; feedback
iDelaytime init 1.0 ; delai en secondesaSigl delayr iDelaytime
aSigr delayr iDelaytime
delayw kDelaydecay * (gadell + aSigl)
delayw kDelaydecay * (gadelr + aSigr)
asgdell = aSigl + gadell
asgdelr = aSigr + gadelrasigdell dcblock2 asgdell ; decliquage
asigdelr dcblock2 asgdelr ; decliquagegaverbl = gaverbl + (asigdell*girevsend) ; reverb send gauche
gaverbr = gaverbr + (asigdelr*girevsend) ; reverb send droitouts asigdell, asgdelr
gadell = 0
gadelr = 0endin
;;;*****REVERB SEAN COSTELLO*****
instr 101denorm gaverbl
denorm gaverbr;fblvl — feedback level, in the range 0 to 1. 0.6 gives a good small « live » room sound, 0.8 a small hall, and 0.9 a large hall. A setting of exactly 1 means infinite length, while higher values will make the opcode unstable.
;kfco — cutoff frequency of simple first order lowpass filters in the feedback loop of delay lines, in Hz. Should be in the range 0 to israte/2 (not sr/2). A lower value means faster decay in the high frequency range.
; ainL, ainR, kfblvl, kfco[, israte[, ipitchm[, iskip]]]
arvl, arvr reverbsc gaverbl, gaverbr, 0.85, 12000, sr, 0.5, 1arevl dcblock arvl ; decliquage
arevr dcblock arvr ; decliquageouts arevl, arevr
clear gaverbl
clear gaverbrendin
;;; ****Freeverb****
instr 102denorm gaverb2l
denorm gaverb2r;kRoomSize (range: 0 to 1) — controls the length of the reverb, a higher value means longer reverb. Settings above 1 may make the opcode unstable.
;kHFDamp (range: 0 to 1): high frequency attenuation; a value of zero means all frequencies decay at the same rate, while higher settings will result in a faster decay of the high frequency range.; kRoomSize, kHFDamp[, iSRate[, iSkip]]
arvl, arvr freeverb gaverb2l, gaverb2r, 0.45, 0.55, sr, 0outs arvl, arvr
clear gaverb2l
clear gaverb2rendin
On peut voir ci-dessus que le moteur de la synthèse (instr 1) est très simple, abstraction faite des deux réverbs, du délai, du déclicage et de tous leurs paramètres d’initialisation:
instr 1
iamp = p4
ifreq= p5
ipan = p6
ienv = p7
idel = p8
irev = p9
idur = p3
kenv oscil1i 0, iamp, idur, ienv
asig oscili kenv, ifreq, 1
asigl = asig*(1-ipan)*adamping
asigr = asig*ipan*adamping
outs asigl, asigr
endin
et qu’il se résume aux quelques lignes ci-dessus dès lors qu’on enlève les processus annexes.
Les paramètres sont l’amplitude (iamp), la hauteur (ifreq), le panoramique L/R (ipan), l’enveloppe d’amplitude (ienv), l’envoi dans le délai (idel) et dans la réverb (iverb) soit neuf paramètres au total ce qui fera neuf entrées à la boite i-statements dans le patch OM comme nous allons le voir plus bas.
Le patch « template »
Je ne détaillerai pas le patch, vous pourrez l’étudier de plus près si vous le téléchargez. L’orchestre a, quand à lui et comme le patch, été expliqué dans d’autres articles sur le même sujet.
Vous pouvez télécharger le patch OM ci-dessous. Quand à l’orchestre vous pouvez le copier ci-dessus(cmd-c) et le coller(cmd-v) dans la boite orchestra du patch, si elle est vide. Il est également présent dans le dossier, il suffira alors de l’importer dans la boite textfile.
Télécharger csound_template folder