Evaluation des expressions

Dans les anciennes versions de Csound les nombres présents dans une partition étaient utilisés tels quels. Dans certains cas, une évaluation simple serait plus facile. Ce besoin est accru s'il y a des macros. Pour y arriver, on a introduit la syntaxe des expressions arithmétiques entre crochets [ ]. On peut utiliser des expressions avec les opérations +, -, *, /, % ("modulo"), et ^ ("élévation à une puissance"), les groupements se faisant par parenthèses ( ). Les signes unaires plus et moins sont aussi supportés. Les expressions peuvent inclure des nombres et, naturellement, des macros dont la valeur est une chaîne numérique ou arithmétique. Tous les calculs sont faits en nombres en virgule flottante. Les règles de précédence usuelles sont suivies lors de l'évaluation : les expressions entre parenthèse () sont évaluées en premier et ^ est évalué avant *, /, et % qui sont évalués avant + et -.

En plus des opérations arithmétiques, les opérateurs logiques bit à bit suivants sont aussi disponibles : & (ET), | (OU), et # (OU exclusif). Ces opérateurs arrondissent leurs opérandes à l'entier (long) le plus proche avant l'évaluation. Les opérateurs logiques ont la même précédence que les opérateurs arithmétiques *, /, et %.

Finalement, on peut utiliser le symbole tilde ˜ dans une expression chaque fois qu'un nombre est permis. Chaque ˜ sera remplacé par un nombre aléatoire compris entre zéro (0) et un (1).

Exemple

r3  CNT

i1  0  [0.3*$CNT.]
i1  +  [($CNT./3)+0.2]

e

Comme les trois copies de la section comprennent la macro $CNT. avec les valeurs successives 1, 2 et 3, le développement est

s
i1  0  0.3
i1  0.3  0.533333
s
i1  0  0.6
i1  0.6  0.866667
s
i1  0  0.9
i1  0.9  1.2
e

C'est une forme extrême, mais on peut aussi utiliser le système d'évaluation pour répéter des sections avec des différences subtiles.

Voici quelques exemples simples de chaque opérateur :

i1  0   1   [ 110 + 220 ]      ; evaluates to 330
i1  +   .   [ 330 - 55 ]       ; 275
i1  +   .   [ 44 * 10 ]        ; 440
i1  +   .   [ 1100 / 2 ]       ; 550
i1  +   .   [ 5 ^ 4 ]          ; 625
i1  +   .   [ 5660 % 1000 ]    ; 660
i1  +   .   [ 110 & 220 ]      ; 76
i1  +   .   [ 110 | 220 ]      ; 254
i1  +   .   [ 110 # 220 ]      ; 178
i1  +   .   [~]                ; random between 0-1
i1  +   .   [~ * 4 + 1]        ; random between 1-5
i1  +   .   [~ * 95 + 5]       ; random between 5-100

i1  +   .   [ 8 / 2 * 3 ]      ; 12
i1  +   .   [ 4 + 3 - 2 + 1 ]  ; 6
i1  +   .   [ 4 + 3 * 2 + 1 ]  ; 11
i1  +   .   [(4 + 3)*(2 + 1)]  ; 21

i1  +   .   [ 2 * 2 & 3 ]      ; 4
i1  +   .   [ 3 & 2 * 2 ]      ; 0
i1  +   .   [ 4 | 3 * 3 ]      ; 13

L'opérateur @

On a ajouté dans la version 3.56 de Csound @x (la première puissance de deux supérieure ou égale à x) et @@x (la première puissance de deux plus un supérieure ou égale à x).

[ @ 11 ] will evaluate to 16
[ @@ 11 ] to 17

Crédits

Auteur : John ffitch

University of Bath/Codemist Ltd.

Bath, UK

Avril 1998 (Nouveau dans la version 3.48 de Csound)