% — Opérateur modulo.
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.
L'opérateur % retourne la valeur de la réduction de a par b, de telle façon que le résultat, en valeur absolue, est inférieur à la valeur absolue de b, par soustraction répétée. C'est l'équivalent de la fonction modulo pour les entiers. Nouveau dans la version 3.50 de Csound.
Les arguments de % peuvent être des valeurs scalaires ou des tableaux (vecteurs) unidimensionnels de taux-k, ou n'importe quelle combinaison des deux. Si l'un des arguments est un tableau, la valeur retournée le sera également.
Voici un exemple de l'opérateur %. Il utilise le fichier modulus.csd.
Exemple 17. Exemple de l'opérateur %.
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 -Ma --midi-key=4 --midi-velocity-amp=5 -m0 ;;;realtime audio out and midi in ;-iadc ;;;uncomment -iadc if realtime audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o %.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 giScale ftgen 1, 0, -12, -2, 0, -34, -7, 10, -14, 3, -21, -3, -27, -10, 7, -17 ;12 note scale with detuned keys instr 1 ikey = p4 ivel = p5 indx = ikey % 12 ;work on the twelftone scale icent tab_i indx, giScale ;load the scale ifreqeq = cpsmidinn(ikey) ifreq = ifreqeq * cent(icent) ;change frequency by cents from table prints "Key %d modulus 12 = %d. ", ikey, indx prints "Equal-tempered frequency of this key = %f,", ifreqeq prints " but here with cent deviation %d = %f%n", icent, ifreq asig vco2 ivel*.5, ifreq outs asig, asig endin </CsInstruments> <CsScore> f 0 60 ;run for 60 seconds e </CsScore> </CsoundSynthesizer>