%

% — Opérateur modulo.

Description

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.

Syntaxe

a % b  (pas de restriction de taux)

où les arguments a et b peuvent être des expressions.

Arguments

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.

Exemples

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>


Voir aussi

-, +, &&, ||, *, /, ^

Crédits

L'arithmétique sur les vecteurs est nouvelle dans le version 6.00