Uses Chebyshev coefficients to generate stored polynomial functions which, under waveshaping, can be used to split a sinusoid into harmonic partials having a pre-definable spectrum.
size -- number of points in the table. Must be a power of 2 or a power-of-2 plus 1 (see f statement). The normal value is power-of-2 plus 1.
xint -- provides the left and right values [-xint, +xint] of the x interval over which the polynomial is to be drawn. These subroutines both call GEN03 to draw their functions; the p5 value here is therefore expanded to a negative-positive p5, p6 pair before GEN03 is actually called. The normal value is 1.
xamp -- amplitude scaling factor of the sinusoid input that is expected to produce the following spectrum.
h0, h1, h2, etc. -- relative strength of partials 0 (DC), 1 (fundamental), 2 ... that will result when a sinusoid of amplitude
xamp * int(size/2)/xint
![]() | Note |
---|---|
|
Here is a simple example of the GEN14 routine. It uses the files gen14.orc and gen14.sco. It creates a function which, under waveshaping, will split a sinusoid into 3 odd-harmonic partials of relative strength 5:3:1. Here is its diagram:
Diagram of the waveform generated by GEN14.
Example 1. A simple example of the GEN14 routine.
/* gen14.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
kval table kndx, ifn, ixmode
; Generate a sine waveform, use our Table #1 value to
; vary its frequency by 100 Hz from its base frequency.
ibasefreq = 440
kfreq = kval * 100
a1 oscil 20000, ibasefreq + kfreq, 2
out a1
endin
/* gen14.orc */
/* gen14.sco */
; Table #1: a polynomial function (using GEN14).
f 1 0 1025 14 1 1 0 5 0 3 0 1
; Table #2, a sine wave.
f 2 0 16384 10 1
; Play Instrument #1 for 2 seconds.
i 1 0 2
e
/* gen14.sco */