GEN03
Prev | GEN Routines | Next

## GEN03

GEN03 — Generates a stored function table by evaluating a polynomial.

## Description

This subroutine generates a stored function table by evaluating a polynomial in x over a fixed interval and with specified coefficients.

## Syntax

    f  #  time  size  3  xval1  xval2  c0  c1  c2  ...  cn

## Initialization

size -- number of points in the table. Must be a power of 2 or a power-of-2 plus 1.

xval1, xval2 -- left and right values of the x interval over which the polynomial is defined (xval1 < xval2). These will produce the 1st stored value and the (power-of-2 plus l)th stored value respectively in the generated function table.

c0, c1, c2, ... cn -- coefficients of the nth-order polynomial

c0 + c1x + c2x2 + . . . + cnxn

Coefficients may be positive or negative real numbers; a zero denotes a missing term in the polynomial. The coefficient list begins in p7, providing a current upper limit of 144 terms.

| Note
The defined segment [fn(xval1), fn(xval2)] is evenly distributed. Thus a 512-point table over the interval [-1,1] will have its origin at location 257 (at the start of the 2nd half). Provided the extended guard point is requested, both fn(-1) and fn(1) will exist in the table. GEN03 is useful in conjunction with table or tablei for audio waveshaping (sound modification by non-linear distortion). Coefficients to produce a particular formant from a sinusoidal lookup index of known amplitude can be determined at preprocessing time using algorithms such as Chebyshev formulae. See also GEN13.

## Examples

Here is a simple example of the GEN03 routine. It uses the files gen03.orc and gen03.sco. It fills a table with a 4th order polynomial function over the x-interval -1 to 1. The origin will be at the offset position 512. The function is post-normalized. Here is its diagram:

Diagram of the waveform generated by GEN03.

Example 5. A simple example of the GEN03 routine.

    /* gen03.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.
      a1 oscil kamp*30000, 440, 2
      out a1
    endin
    /* gen03.orc */

    /* gen03.sco */
    ; Table #1: a polynomial function (using GEN03).
    f 1 0 1025 3 -1 1 5 4 3 2 2 1
    ; Table #2, a sine wave.
    f 2 0 16384 10 1

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

## See Also

GEN13, GEN14, and GEN15.

Prev | Up | Next
GEN02 | Home | GEN04