La syntaxe de l'orchestre a été modifiée récemment pour permettre de définir des instruments avec des noms en chaîne de caractères. On peut appeler les instruments ainsi nommés depuis la partition et ils sont supportés par un certain nombre d'opcodes.
Un instrument nommé est déclaré comme suit :
instr Nom[, Nom2[, Nom3[, ...]]] [...] endin
Un instrument seul peut avoir autant de noms que l'on veut, et chacun de ces noms peut être utilisé pour appeler l'instrument. De plus, il est possible d'utiliser des nombres comme des noms, dénotant un instrument numéroté de façon standard, ce qui fait que la déclaration suivante est également valide :
instr 100, Nom1, 99, Nom2, 1, 2, 3
Un nom d'instrument est constitué de lettres, de chiffres, et du caractère de soulignement (_), sans limite de taille, cependant, le premier caractère ne doit pas être un chiffre. Optionnellement, le nom de l'instrument peut-être préfixé par un caractère '+' (voir ci-dessous), par exemple :
instr +Reverb
Pour tous les noms d'instrument, un numéro est affecté automatiquement (note : si le niveau des messages (-m) n'est pas nul, ces numéros sont imprimés sur la console pendant la compilation de l'orchestre), en suivant ces règles :
le nombre est choisi parmi les numéros d'instrument non affectés en ordre ascendant, en commençant par 1
les numéros sont affectés dans l'ordre de définition des noms d'instrument, si bien que les derniers instruments nommés auront toujours un numéro plus élévé (sauf si le modificateur '+' est utilisé)
si le nom de l'instrument est préfixé par un '+', le numéro affecté sera plus grand que tous ceux des autres instruments sans le '+' (numérotés et nommés). S'il y a plusieurs instruments '+', la numérotation de ceux-ci suivra l'ordre de leur définition, selon la règle ci-dessus.
L'utilisation de '+' est surtout utile pour la sortie globale ou les instruments d'effets, qui doivent être exécutés après les autres instruments.
Exemple de numérotation d'instruments :
instr 1, 2 endin instr Instr1 endin instr +Effet1, Instr2 endin instr 100, Instr3, +Effet2, Instr4, 5 endin
Dans cet exemple, les numéros d'instrument sont affectés comme suit :
Instr1: 3 Effet1: 101 Instr2: 4 Instr3: 6 Effet2: 102 Instr4: 7
On peut appeler les instruments nommés en utilisant le nom entre guillements à la place du numéro d'instrument (note : le caractère '+' doit être omis). Actuellement (depuis Csound 4.22.4), les instruments nommés sont supportés par :
les évènements de partition 'i' et 'q'
Notes | |
---|---|
|
les évènement en ligne (-L)
les opcodes event, schedkwhen, subinstr, et subinstrinit
les opcodes massign, pgmassign, prealloc, et mute
De plus, il y a un nouvel opcode (nstrnum) qui retourne le numéro d'un instrument nommé :
insno nstrnum "nom"
Dans l'exemple ci-dessus, nstrnum "Effet1" retournerait 101. S'il n'existe aucun instrument avec le nom spécifié, une erreur d'initialisation est levée et -1 est retourné.
; ---- orchestre ---- sr = 44100 ksmps = 10 nchnls = 1 prealloc "SineWave", 20 prealloc "MIDISineWave", 20 massign 1, "MIDISineWave" gaOutSend init 0 instr +OutputInstr out gaOutSend clear gaOutSend endin instr SineWave a1 oscils p4, p5, 0 vincr gaOutSend, a1 endin instr MIDISineWave iamp veloc inote notnum icps = cpsoct(inote / 12 + 3) a1 oscils iamp * 100, icps, 0 vincr gaOutSend, a1 endin ; ---- partition ---- i "SineWave" 0 2 12000 440 i "OutputInstr" 0 3 e