Construct functions from segments of exponential curves in breakpoint fashion.
Syntax
f#timesize25x1y1x2y2x3...
Initialization
size -- number of points in the table. Must be a power of 2 or power-of-2 plus 1 (see f statement).
x1, x2, x3, etc. -- locations in table at which to attain the following y value. Must be in increasing order. If the last value is less than size, then the rest will be set to zero. Should not be negative but can be zero.
y1, y2, y3,, etc. -- Breakpoint values attained at the location specified by the preceding x value. These must be non-zero and must be alike in sign.
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.
Examples
Here is an example of the GEN25 generator. It uses the file gen25.csd.
<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 gen25.wav -W ;;; for file output any platform</CsOptions><CsInstruments>sr=44100ksmps=32nchnls=20dbfs=1gisinftgen1,0,32768,10,1gienvftgen2,0,1025,25,0,0.01,200,1,400,1,513,0.01; y value must be >= 0instr1kcpsinit3/p3;play 3x over duration of notekndxphasorkcpsixmode=1;normalize to 0-1kvaltablekndx,gienv,ixmodekval=kval*100;scale up to 0-100asigposcil1,220+kval,gisin;use table for amplitudeoutsasig,asigendin</CsInstruments><CsScore>i104e</CsScore></CsoundSynthesizer>
This is the diagram of the waveform of the GEN25 routine, as used in the example:
f 2 0 1025 25 0 0.01 200 1 400 1 513 0.01 - a function which begins at 0.01, rises to 1 at the 200th table location, makes a straight line to the 400th location, and returns to 0.01 by the end of the table