GEN05
Prev | GEN Routines | Next

## GEN05

GEN05 — Constructs functions from segments of exponential curves.

## Description

Constructs functions from segments of exponential curves.

## Syntax

    f # time size 5 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, . . . These must be nonzero and must be alike in sign.

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
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 a simple example of the GEN05 routine. It uses the files gen05.orc and gen05.sco. It will create a nice percussive amplitude envelope. Here is its diagram:

Diagram of the waveform generated by GEN05.

Example 6. A simple example of the GEN05 routine.

    /* gen05.orc */
    ; Initialize the global variables.
    sr = 44100
    kr = 4410
    ksmps = 10
    nchnls = 1

    ; Instrument #1.
    instr 1
      ; Create an index over the length of our entire note.
      kcps init 1/p3
      kndx phasor kcps

      ; Read Table #1 with our index.
      ifn = 1
      ixmode = 1
      kamp table kndx, ifn, ixmode

      ; Create a sine wave, use the Table #1 values to control
      ; the amplitude. This creates a nice percussive sound.
      a1 oscil kamp*30000, 440, 2
      out a1
    endin
    /* gen05.orc */

    /* gen05.sco */
    ; Table #1: a percussive envelope (using GEN05).
    f 1 0 64 5 1 2 120 60 1 1 0.001 1
    ; Table #2, a sine wave.
    f 2 0 16384 10 1

    ; Play Instrument #1 for 2 seconds.
    i 1 0 2
    e
    /* gen05.sco */

## See Also

GEN06, GEN07, and GEN08

## Credits

Example written by Kevin Conder

Prev | Up | Next
GEN04 | Home | GEN06