GEN06

GEN06 — Generates a function comprised of segments of cubic polynomials.

Description

This subroutine will generate a function comprised of segments of cubic polynomials, spanning specified points just three at a time.

Syntax

f  #   time   size   6   a   n1   b   n2   c   n3   d ...

Initialization

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

a, c, e, ... -- local maxima or minima of successive segments, depending on the relation of these points to adjacent inflexions. May be either positive or negative.

b, d, f, ... -- ordinate values of points of inflexion at the ends of successive curved segments. May be positive or negative.

n1, n2, n3 ... -- number of stored values between specified points. Cannot be negative, but a zero is meaningful for specifying discontinuities. The sum n1 + n2 + ... will normally equal size for fully specified functions. (for details, see GEN05).

[Note] Note

GEN06 constructs a stored function from segments of cubic polynomial functions. Segments link ordinate values in groups of 3: point of inflexion, maximum/minimum, point of inflexion. The first complete segment encompasses b, c, d and has length n2 + n3, the next encompasses d, e, f and has length n4 + n5, etc. The first segment (a, b with length n1) is partial with only one inflexion; the last segment may be partial too. Although the inflexion points b, d, f ... each figure in two segments (to the left and right), the slope of the two segments remains independent at that common point (i.e. the 1st derivative will likely be discontinuous). When a, c, e... are alternately maximum and minimum, the inflexion joins will be relatively smooth; for successive maxima or successive minima the inflexions will be comb-like.

Examples

Here is an example of the GEN06 routine. It uses the files gen06.csd.

Example 1271. An example of the GEN06 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 gen06.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

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

instr 1

ifn  = p4				;choose between tables
kcps init 1/p3				;create index over duration of note.
kndx phasor kcps
ixmode = 1
kval table kndx, ifn, ixmode		;normalize mode

kfreq = kval * 30			;scale frequency to emphasixe effect
asig  poscil .7, 220 + kfreq, 1		;add to frequency
      outs asig, asig
  
endin
</CsInstruments>
<CsScore>
f 1 0 16384 10 1 ;sine wave.
f 2 0 513 6 1 128 -1 128 1 64 -.5 64 .5 16 -.5 8 1 16 -.5 8 1 16 -.5 84 1 16 -.5 8 .1 16 -.1 17 0
f 3 0 513 6 0 128 0.5 128 1 128 0 129 -1

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


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

f 2 0 513 6 1 128 -1 128 1 64 -.5 64 .5 16 -.5 8 1 16 -.5 8 1 16 -.5 84 1 16 -.5 8 .1 16 -.1 17 0 - a not-so-smooth curve

f 2 0 513 6 1 128 -1 128 1 64 -.5 64 .5 16 -.5 8 1 16 -.5 8 1 16 -.5 84 1 16 -.5 8 .1 16 -.1 17 0 - a not-so-smooth curve

f 3 0 513 6 0 128 0.5 128 1 128 0 129 -1 - a curve running 0 to 1 to -1, with a minimum, maximum and minimum at these values respectively. Inflexions are at .5 and 0 and are relatively smooth

f 3 0 513 6 0 128 0.5 128 1 128 0 129 -1 - a curve running 0 to 1 to -1, with a minimum, maximum and minimum at these values respectively. Inflexions are at .5 and 0 and are relatively smooth

See Also

GEN05, GEN07, and GEN08