Skip to content

randc

Generates a controlled random number series with cubic interpolation between each new number.

Syntax

ares randc xamp, xcps [, iseed] [, isize] [, ioffset]
kres randc kamp, kcps [, iseed] [, isize] [, ioffset]

Initialization

iseed (optional, default=0.5) -- seed value for the recursive pseudo-random formula. A value between 0 and +1 will produce an initial output of kamp * iseed. A negative value will cause seed re-initialization to be skipped. A value greater than 1 will seed from system time, this is the best option to generate a different random sequence for each run.

isize (optional, default=0) -- if zero, a 16 bit number is generated. If non-zero, a 31-bit random number is generated. Default is 0.

ioffset (optional, default=0) -- a base value added to the random result.

Performance

kamp, xamp -- range over which random numbers are distributed.

kcps, xcps -- the frequency which new random numbers are generated.

The internal pseudo-random formula produces values which are uniformly distributed over the range kamp to -kamp. rand will thus generate uniform white noise with an R.M.S value of kamp / root 2.

The remaining units produce band-limited noise: the kcps and xcps parameters permit the user to specify that new random numbers are to be generated at a rate less than the sampling or control frequencies. randi will produce straight-line interpolation between each new number and the next.

Examples

Here is an example of the randc opcode. It uses the file randc.csd.

Example of the randc opcode.
<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
-odac     ;;;realtime audio out
;-iadc    ;;;uncomment -iadc if RT audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o randc.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

sr = 44100
ksmps = 32
nchnls = 2
0dbfs  = 1

; by Menno Knevel - 2024

instr 1 ;same values every time

krnd randc 100, 10
     printk .5, krnd                    ; look 
aout oscili 0.8, 440+krnd               ; & listen
     outs aout, aout

endin

instr 2 ;different values every time

krnd randc 100, 10, 10                  ; seed from system clock
     printk .5, krnd                    ; look 
aout oscili 0.8, 440+krnd               ; & listen
     outs aout, aout

endin
</CsInstruments>
<CsScore>
i 1 0 3
i 2 4 3
e
</CsScore>
</CsoundSynthesizer>

The example will produce the following output:

i   1 time     0.00000:    50.00305
i   1 time     0.50068:    68.16267
i   1 time     1.00136:   -94.61682
i   1 time     1.50204:   -74.38840
....

WARNING: Seeding from current time 67726716

i   2 time     4.00036:    79.19006
i   2 time     4.50104:   -47.46559
i   2 time     5.00172:    74.73582
i   2 time     5.50240:    65.35726
....

See also

Random (Noise) Generators, randh, rand