%
Prev | Orchestra Opcodes and Operators | Next

## %

% — Modulus operator.

## Description

Arithmetic operators perform operations of change-sign (negate), don't-change-sign, logical AND logical OR, add, subtract, multiply and divide. Note that a value or an expression may fall between two of these operators, either of which could take it as its left or right argument, as in

a + b * c.

In such cases three rules apply:

1. * and / bind to their neighbors more strongly than + and −. Thus the above expression is taken as

a + (b * c)

with * taking b and c and then + taking a and b * c.

2. + and − bind more strongly than &&, which in turn is stronger than ||:

a && b - c || d

is taken as

(a && (b - c)) || d

3. When both operators bind equally strongly, the operations are done left to right:

a - b - c

is taken as

(a - b) - c

Parentheses may be used as above to force particular groupings.

The operator % returns the value of a reduced by b, so that the result, in absolute value, is less than the absolute value of b, by repeated subtraction. This is the same as modulus function in integers. New in Csound version 3.50.

## Syntax

    a % b  (no rate restriction)

where the arguments a and b may be further expressions.

## Arguments

The arguments of % can be scalar values or k-rate one dimensional arrays (vectors), or any combination. If one of the arguments is an array, so is the value.

## Examples

Here is an example of the % operator. It uses the file modulus.csd.

Example 21. Example of the % operator.

See the sections Real-time Audio and Command Line Flags for more information on using command line flags.

    <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>

## See Also

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

## Credits

Arithmetic on vectors is new in version 6.00

Prev | Up | Next
$NAME | Home | &&