Syntaxe de l'orchestre

L'orchestre Csound (.orc) ou la section <CsInstruments> d'un fichier csd, contient :

L'en-tête de l'orchestre, les blocs d'instrument, et les UDOs contiennent des instructions d'orchestre. Dans Csound une instruction d'orchestre a le format :

      étiquette:   résultat opcode argument1, argument2, ... ;commentaires
    

L'étiquette est facultative et indentifie l'instruction de base qui suit comme cible potentielle d'une opération goto (voir contrôle du déroulement du programme). Une étiquette n'a aucun effet sur l'instruction en soi.

Selon leur fonction, certains opcodes ne produisent pas de sortie et n'ont donc pas de valeur de retour. D'autres ne prennent pas d'argument et produisent seulement un résultat.

Chaque instruction d'orchestre doit tenir sur une seule ligne, cependant les longues lignes peuvent être continuées sur la ligne suivante grâce au caractère '\'. Ce caractère indique que la ligne suivante fait partie de la ligne courante, de façon à pouvoir couper une ligne pour en faciliter la lecture, comme ceci :

a2  oscbnk kcps, 1.0, kfmd1, 0.0, 40, 203, 0.1, 0.2, kamfr, kamfr2, 148,  \
           0, 0, 0, 0, 0, 0, -1,                                          \
           kfnum, 3, 4

Les commentaires sont facultatifs et ils ont pour but de permettre à l'utilisateur de commenter le code de son orchestre. Les commentaires commencent par un point-virgule (;) et s'étendent jusqu'à la fin de la ligne. Les commentaires peuvent optionnellement être écrits en style C, s'étendant sur plusieurs lignes comme ceci :

/* Tout ce qui se trouve ici --------
   est un commentaire qui peut couvrir
   plusieurs lignes ---------  */

Le reste (résultat, opcode, et arguments) forme l'instruction de base. C'est également facultatif, ce qui veut dire qu'une ligne peut n'avoir qu'une étiquette ou un commentaire ou bien être complètement blanche. Si elle est présente, l'instruction de base doit être entièrement contenue dans une ligne, et elle est terminée par un retour chariot et un linefeed.

L'opcode détermine l'opération à effectuer ; habituellement, il prend un certain nombre de valeurs en entrée (ou arguments, au maximum environ 800) ; et il a normalement un champ résultat variable dans lequel il envoie les valeurs de sortie à un certain taux de cadencement fixe. Il y a quatre taux de cadencement possibles :

  1. une seule fois, au moment de l'initialisation de l'orchestre (en fait une affectation permanente)

  2. une fois au début de chaque note (à la date (init) de l'initialisation : taux-i)

  3. à chaque passage dans la boucle de contrôle de l'exécution (taux de contrôle, ou taux-k)

  4. à chaque échantillon sonore de chaque boucle de contrôle (taux d'exécution audio, ou taux-a)

Instructions de l'en-tête de l'orchestre

L'en-tête de l'orchestre contient l'information globale qui s'applique à tous les instruments et qui définit les aspects de la sortie de Csound. On y fait parfois référence comme instr 0, parce qu'il se comporte comme un instrument, mais sans traitement de taux-k ou de taux-a (seuls les opcodes et les instructions qui fonctionnent au taux-i y sont autorisés).

Une instruction d'en-tête d'orchestre n'opère qu'une fois, à l'initialisation de l'orchestre. La plupart du temps il s'agit de l'affectation d'une valeur à un symbole global réservé, par exemple sr = 20000. Toutes les instructions d'en-tête d'orchestre appartiennent au pseudo instrument 0, dont un passage init est effectué avant tout autre instrument au temps 0 de la partition. Toute instruction ordinaire peut servir d'instruction d'en-tête d'orchestre, par exemple gifreq = cpspch(8.09) à condition d'être seulement une opération du moment d'initialisation. Les instructions placées normallement dans un en-tête d'orchestre sont :

Par exemple, un en-tête de Csound peut ressembler à ceci :

sr = 44100
kr = 4410
ksmps = 10
nchnls = 2
0dbfs = 1

massign 1, 10