GEN21

GEN21 — Generates tables of different random distributions.

Description

This generates tables of different random distributions. (See also betarand, bexprnd, cauchy, exprand, gauss, linrand, pcauchy, poisson, trirand, unirand, and weibull)

Syntax

f # time size 21 type level [arg1  [arg2]]

Initialization

time and size are the usual GEN function arguments. level defines the amplitude. Note that GEN21 is not self-normalizing as are most other GEN functions. type defines the distribution to be used as follow:

  • 1 = Uniform (positive numbers only)

  • 2 = Linear (positive numbers only)

  • 3 = Triangular (positive and negative numbers)

  • 4 = Exponential (positive numbers only)

  • 5 = Biexponential (positive and negative numbers)

  • 6 = Gaussian (positive and negative numbers)

  • 7 = Cauchy (positive and negative numbers)

  • 8 = Positive Cauchy (positive numbers only)

  • 9 = Beta (positive numbers only)

  • 10 = Weibull (positive numbers only)

  • 11 = Poisson (positive numbers only)

Of all these cases only 9 (Beta) and 10 (Weibull) need extra arguments. Beta needs two arguments and Weibull one.

If type = 6, the random numbers in the ftable follow a normal distribution centered around 0.0 (mu = 0.0) with a variance (sigma) of level / 3.83. Thus more than 99.99% of the random values generated are in the range -level to +level. The default value for level is 1 (sigma = 0.261). If a mean value different of 0.0 is desired, this mean value has to be added to the generated numbers.

Examples

f1 0 1024 21 1       ; Uniform (white noise)
f1 0 1024 21 6       ; Gaussian (mu=0.0, sigma=1/3.83=0.261)
f1 0 1024 21 6 5.745 ; Gaussian (mu=0.0, sigma=5.745/3.83=1.5)
f1 0 1024 21 9 1 1 2 ; Beta (note that level precedes arguments)
f1 0 1024 21 10 1 2  ; Weibull

All of the above additions were designed by the author between May and December 1994, under the supervision of Dr. Richard Boulanger.

Here is a complete example of the GEN21 routine. Play gen21.csd

Example 1296. Example of the GEN21 routine.

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 gen21.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

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

instr 1

ifn    = p4
isize  = ftlen(ifn) 
prints "TABLE NUMBER: %d\n", ifn   
prints "Index\tValue\n"
    
iindex = 0				;start loop
begin_loop:
     ivalue tab_i iindex, ifn
     prints "%d:\t%f\n", iindex, ivalue
     iindex = iindex + 1
  if (iindex < isize) igoto begin_loop
  
;produce sound - and repeat it 10 times so you can hear the patterns:   
aphase phasor 10/10			;play all 32 values 10x over 10 seconds
aphase = aphase*isize			;step through table
afrq   table aphase, p4			;read table number
asig   poscil .5, (afrq*500)+1000,10	;scale values of table 500 times, add 1000 Hz
       outs asig , asig			;so we can distinguish the different tables 
endin

</CsInstruments>
<CsScore>
f1 0 32 21 1		;Uniform (white noise)
f2 0 32 21 6		;Gaussian (mu=0.0, sigma=1/3.83=0.261)
f3 0 32 21 6 5.745	;Gaussian (mu=0.0, sigma=5.745/3.83=1.5)
f4 0 32 21 9 1 1 2	;Beta (note that level precedes arguments)
f5 0 32 21 10 1 2	;Weibull
f10 0 8192 10 1		;Sine wave

i 1  0 10 1
i 1 11 10 2
i 1 22 10 3
i 1 33 10 4
i 1 44 10 5
e
</CsScore>
</CsoundSynthesizer>


These are the diagrams of the waveforms of the GEN21 routines, as used in the example:

f 1 0 32 21 1 - positive numbers only

f 1 0 32 21 1 - positive numbers only

f 2 0 32 21 6

f 2 0 32 21 6

f 3 0 32 21 6 5.745

f 3 0 32 21 6 5.745

f 4 0 32 21 9 1 1 2 - positive numbers only

f 4 0 32 21 9 1 1 2 - positive numbers only

f 5 0 32 21 10 1 2 - positive numbers only

f 5 0 32 21 10 1 2 - positive numbers only

Credits

Author: Paris Smaragdis
MIT, Cambridge
1995

Author: John ffitch
University of Bath/Codemist Ltd.
Bath, UK

Precisions about mu and sigma added by François Pinot after a discussion with Joachim Heintz on the Csound List, December 2010.

New in Csound version 3.2