Ce tutorial vous apprendra à créer ou adapter des instruments cSound pour Sympheo. Il est absolument indispensable d’être familiarisé au langage de programmation cSound. Si ce n’est le cas, de nombreux tutoriaux existent sur le site www.csounds.com .
-------------------------------------------------------------------------------- ;< info
;< 1:a = id9 "amplitude"
a
; 2éme section l’opcode spécifique à cSound. opcode tutorialFM,
a, akpkkp a1 foscili aamp, kfreq, icar, kmod, kndxmod, itable xout a1 endop
Ensuite les instructions instr et endin sont remplacés par opcode et endop, celles-ci permettent d’utiliser des instruments exactement comme des opcodes internes à cSound, elles facilitent grandement l’interfaçage avec Sympheo.
[opcode name] [outtypes declaration],
[intypes declaration] intypes: akpkkp
= 1 a-rate, 3 k-rates, 2 constantes Les entrées et les sorties des paramètres
s’effectuent respectivement avec xin
et xout. xout envoie a1
dans l’unique canal de sortie. Etudions la section spécifique à Sympheo : ;< info
;< 1:a = id9 "amplitude"
a
;<info et ;<endinfo marque le début et la fin du bloc descriptifs des paramètres de l’opcode vient ensuite : ;< "tutorial
FM" 6 audioin:[nbin]: le nb de canaux audio
en entrée dans l’opcode, si ce paramètre est omis,
nbin vaut 0 par défaut. Ce qui est le cas ici. audioout:[nbout]: le nb de canaux audio
en sortie, doit correspondre avec le nombre de paramètres [outtype]
de l’instruction opcode. Si
ce paramètre est omis, nbout vaut 1 par défaut.
;< 1:a = id9 "amplitude"
a ;< [oppar]:[opdat] = id[sppar] [nom] [unit] def [defval] min [minval] max [maxval]
opdat : le type de données envoyées dans l’opcode a = a-rate
nom: le nom du paramètre, l’écrire entre guillemet.
Remarque : pour l’amplitude et la frequence il est possible de préciser le numéro de partielle du paramètre de la façon suivante: a1, a2, f4…
minval et maxval : définissent les valeurs extrêmes de l’échelle dans « l’editeur graphique » spécifique à ce paramètre. Defval, minval et maxval s’utilisent uniquement pour les paramètres utilisateur (u)
Voici un exemple d’opcode gérant plusieurs entrées
et sorties.
;< info ;< "stereo pan1" 1 audioin: 2 audioout:2 ;< 1:a = id2 "pan" u def 0.5 min 0.0 max 1.0 ;< endinfo ; 2éme section
l’opcode spécifique à cSound. apan, aleft, aright xin a1 = aleft*apan xout a1,a2 ; WARNING bug si on utilise directement les params
de xin en sortie. endop Les tables tiennent un rôle important dans l’architecture de cSound, voici comment elles sont gérées par Sympheo : Les tables servent à communiquer les données des courbes aux opcodes, par conséquent une gestion rigoureuse des numéros de table est indispensable. Pour éviter tout conflit avec les tables internes à Sympheo les tables utilisateur n’ont pas de numéros mais uniquement un label alphanumérique. Elles sont déclarées de la façon suivante : ;< table ;< f $TABLE_SINUS
0 16384 10 1 ;< endtable
Chaque table doit tenir sur une seule ligne et doit débuter par ;< A la place du numéro de la table il y a un nom précédé impérativement d’un $, ce nom est un define pour csound. Inutile d’utiliser l’instruction #define , Sympheo se charge de la créer automatiquement après analyse du texte. Les autres paramètres sont conformes à cSound. Où écrire ces tables ? - Dans le fichier common.tbl :
Exemple d’utilisation : --------------------------------------------------------- ;< info ;< "granular" 4 ;< 1:a = id1
"amplitude" a
;< f $TABLE_WFRM
0 1024 10 1 0 .2 .2 .03 .12 .22 .11 .022 .0101 .0167 ;< endtable
aampl, kfrq, kdens, kfoff xin a1 grain aampl,kfrq, kdens, 10000,
kfrq* kfoff, .2, $TABLE_WFRM, $TABLE_GRAIN_ENVEL1, 5 endop ;<info ;< "additive synth8" 16 ;< 1:a = id1
"amplitude1" a1
;amplitude fondamentale ;< 9:a = id21
"frequence1" f1 ;frequence fondamentale ;<endinfo ; 2éme section
l’opcode spécifique à cSound. aampl1, aampl2, aampl3, aampl4, aampl5, aampl6, aampl7, aampl8, afreq1, afreq2, afreq3, afreq4, afreq5, afreq6, afreq7, afreq8 xin a2 = 0 a1 oscil aampl1, afreq1,
$TABLE_SINUS ; fondamentale a1 oscil aampl2, afreq2,
$TABLE_SINUS ; partielle de rang 2 a1 oscil aampl3, afreq3,
$TABLE_SINUS ; partielle de rang 3 a1 oscil aampl4, afreq4,
$TABLE_SINUS ; etc… a1 oscil aampl5, afreq5,
$TABLE_SINUS a1 oscil aampl6, afreq6,
$TABLE_SINUS a1 oscil aampl7, afreq7,
$TABLE_SINUS a1 oscil aampl8, afreq8,
$TABLE_SINUS xout a2 endop
|