int — Extracts an integer from a decimal number.
int(x) (init-rate or control-rate; also works at audio rate in Csound5)
where the argument within the parentheses may be an expression. Value converters perform arithmetic translation from units of one kind to units of another. The result can then be a term in a further expression.
Here is an example of the int opcode. It uses the file int.csd.
Example 476. Example of the int opcode.
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 ;;;realtime audio out ;-iadc ;;;uncomment -iadc if realtime audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o int.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 icount init 0 loop: inum = icount / 3 inm = int(inum) prints "integer (%f/3) = %f\\n", icount, inm loop_lt icount, 1, 10, loop endin </CsInstruments> <CsScore> i 1 0 0 e </CsScore> </CsoundSynthesizer>
Its output should include lines like these:
integer (0.000000/3) = 0.000000 integer (1.000000/3) = 0.000000 integer (2.000000/3) = 0.000000 integer (3.000000/3) = 1.000000 integer (4.000000/3) = 1.000000 integer (5.000000/3) = 1.000000 integer (6.000000/3) = 2.000000 integer (7.000000/3) = 2.000000 integer (8.000000/3) = 2.000000 integer (9.000000/3) = 3.000000
Here is an example for the rounding-group, comparing the different rounding opcodes. It uses the file rounding-group.csd.
Example 477. Example of the rounding group.
<CsoundSynthesizer> <CsOptions> -odac ; </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 ; by tgrey 2020 instr 1 iLoopStart = p4 iLoopEnd = p5 iOffset = p6 iCount init iLoopStart if(iLoopStart<iLoopEnd) then ; loop going up while iCount <= iLoopEnd do iVal = iCount+iOffset iRound = round(iVal) iInt = int(iVal) iFloor = floor(iVal) iCeil = ceil(iVal) print iVal, iRound, iInt, iFloor, iCeil iCount = iCount + 1 od elseif(iLoopEnd<iLoopStart) then ; loop going down while iCount >= iLoopEnd do iVal = iCount+iOffset iRound = round(iVal) iInt = int(iVal) iFloor = floor(iVal) iCeil = ceil(iVal) print iVal, iRound, iInt, iFloor, iCeil iCount = iCount - 1 od endif endin </CsInstruments> <CsScore> i1 0 .1 0 10 .5 i1 .2 .1 0 -10 .5 e </CsScore> </CsoundSynthesizer>