! — Opérateur NON logique.
Les opérateurs arithmétiques réalisent les opérations de changement de signe (négation), de signe inchangé, ET logique, OU logique, addition, soustraction, multiplication et division. Notez qu'une valeur ou une expression peut être placée entre deux de ces opérateurs, lesquels peuvent la prendre comme opérande de gauche ou de droite, comme dans
a + b * c.
Trois règles s'appliquent dans de tels cas :
1. * et / s'appliquent à leurs voisins plus fortement que + et −. Ainsi l'expression ci-dessus s'interprète comme
a + (b * c)
avec * prenant b et c puis + prenant a et b * c.
2. + et − sont prioritaires sur &&, qui devance lui-même || :
a && b - c || d
est interprété comme
(a && (b - c)) || d
3. Quand deux opérateurs sont d'égale importance, les opérations ont lieu de gauche à droite :
a - b - c
est interprété comme
(a - b) - c
On peut utiliser des parenthèses pour forcer un groupement particulier.
Voici un exemple de l'opérateur NON logique. Il utilise le fichier opnot.csd.
Exemple 32. Exemple de l'opcode opnot.
Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;realtime audio out ;-iadc ;;;uncomment -iadc if realtime audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o opand.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 kval randomh 0, 1.2, 20 ;choose between 0 and 1.2 if !(kval >0 && kval<=.5) then ;3 possible outcomes kval = 1 elseif !(kval >.5 && kval<=1) then kval =2 elseif !(kval >1) then kval =3 endif printk2 kval ;print value when it changes asig poscil .7, 440*kval, 1 outs asig, asig endin </CsInstruments> <CsScore> f1 0 16384 10 1 i 1 0 5 e </CsScore> </CsoundSynthesizer>
Sa sortie contiendra des lignes comme celles-ci :
i1 1.00000 i1 2.00000 i1 1.00000 i1 2.00000 i1 1.00000 i1 2.00000 i1 1.00000 .....