frac — Returns the fractional part of a decimal number.
frac(x) (init-rate or control-rate args; also works at audio rate in Csound5)
frac(k/i[]) (k- or i-arrays )
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 frac opcode. It uses the file frac.csd.
Example 382. Example of the frac 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 ; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o frac.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 i1 = 16 / 5 i2 = frac(i1) print i2 endin </CsInstruments> <CsScore> ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
Its output should include a line like this:
instr 1: i2 = 0.200
Here is another example of the frac opcode. It uses the file frac2.csd.
Example 383.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o frac.wav -W ;;; for file output any platform ; By Stefano Cucchi 2024 </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 0dbfs = 1 nchnls = 2 instr 1 gkrandom randomh 1, 45, 300, 2, 3 ; generate some random numbers gkrandomFLOOR = floor (gkrandom) ; take the integer part gkrandomFRAC = frac (gkrandom) ; take the fractional part endin instr 10 ktrigger metro 4 kmintim = 0 kmaxnum = 10 kinsnum = 20 kwhen = 0 kdur = ktrigger*0.25 schedkwhen ktrigger, kmintim, kmaxnum, kinsnum, kwhen, kdur endin instr 20 irandomFLOOR = i(gkrandomFLOOR) irandomFRAC = i(gkrandomFRAC) ; Use the integer part to control the number of harmonics of every note ; after converting (k) value to (i) prints "generated value = %f\n", i(gkrandom) prints "fractional part = %f\n", irandomFRAC a1 buzz 0.5, 120, irandomFLOOR, 1 kenvelope linseg 0, p3*0.1, 1, p3*0.8, 1, p3*0.1, 0 a1 = a1*kenvelope aL, aR pan2 a1, irandomFRAC, 1 ; use the fractional part to control the pan position outs aL, aR endin </CsInstruments> <CsScore> f 1 0 16384 10 1 i 1 0 10 i 10 0 10 e </CsScore> </CsoundSynthesizer>