GEN07

GEN07 — Constructs functions from segments of straight lines.

Description

Constructs functions from segments of straight lines.

Syntax

f  #    time    size   7   a   n1   b   n2   c  ...

Initialization

size -- number of points in the table. Must be a power of 2 or power-of-2 plus 1 (see f statement).

a, b, c, etc. -- ordinate values, in odd-numbered pfields p5, p7, p9, . . .

n1, n2, etc. -- length of segment (no. of storage locations), in even-numbered pfields. Cannot be negative, but a zero is meaningful for specifying discontinuous waveforms (e.g. in the example below). The sum n1 + n2 + .... will normally equal size for fully specified functions. If the sum is smaller, the function locations not included will be set to zero; if the sum is greater, only the first size locations will be stored.

[Note] Note

  • If p4 is positive, functions are post-normalized (rescaled to a maximum absolute value of 1 after generation). A negative p4 will cause rescaling to be skipped.

  • Discrete-point linear interpolation implies an increase or decrease along a segment by equal differences between adjacent locations; exponential interpolation implies that the progression is by equal ratio. In both forms the interpolation from a to b is such as to assume that the value b will be attained in the n + 1th location. For discontinuous functions, and for the segment encompassing the end location, this value will not actually be reached, although it may eventually appear as a result of final scaling.

Examples

Here is an example of the GEN07 routine. It uses the files gen07.csd.

Example 1101. An example of the GEN07 routine.

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

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

instr 1	;use GEN07 to alter frequency

ifn  = p4						;use different GEN07 tables
kcps init 10/p3						;index ftable 10 times over the duration of entire note
kndx phasor kcps
ixmode = 1						;normalize index data
kfrq tablei kndx, ifn, ixmode
kfrq = kfrq*1000					;scale
asig poscil .8, 1220+kfrq, 1				;add to frequency
     outs asig, asig
  
endin
</CsInstruments>
<CsScore>
f 1 0 8192 10 1				;sine wave
f 2 0 1024 7 0 512 1 0 -1 512 0		;sawtooth up and down
f 3 0 1024 7 1 512 1 0 -1 512 -1	;square
f 4 0 1024 7 1 1024 -1 			;saw down

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


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

f 2 0 1024 7 0 512 1 0 -1 512 0 - sawtooth up and down, starting and ending at 0

f 2 0 1024 7 0 512 1 0 -1 512 0 - sawtooth up and down, starting and ending at 0

f 3 0 1024 7 1 512 1 0 -1 512 -1 - a square from positive to negative

f 3 0 1024 7 1 512 1 0 -1 512 -1 - a square from positive to negative

f 4 0 1024 7 1 1024 -1 - sawtooth down, a straight line from positive to negative

f 4 0 1024 7 1 1024 -1 - sawtooth down, a straight line from positive to negative

See Also

GEN05, GEN06, and GEN08