tableikt
Prev | Orchestra Opcodes and Operators | Next

## tableikt

tableikt — Provides k-rate control over table numbers.

## Description

k-rate control over table numbers. Function tables are read with linear interpolation.

The standard Csound opcode tablei, when producing a k- or a-rate result, can only use an init-time variable to select the table number. tableikt accepts k-rate control as well as i-time. In all other respects they are similar to the original opcodes.

## Syntax

    ares tableikt xndx, kfn [, ixmode] [, ixoff] [, iwrap]

    kres tableikt kndx, kfn [, ixmode] [, ixoff] [, iwrap]

## Initialization

ixmode -- if 0, xndx and ixoff ranges match the length of the table. if non-zero xndx and ixoff have a 0 to 1 range. Default is 0

ixoff -- if 0, total index is controlled directly by xndx, ie. the indexing starts from the start of the table. If non-zero, start indexing from somewhere else in the table. Value must be positive and less than the table length (ixmode = 0) or less than 1 (ixmode not equal to 0). Default is 0.

iwrap -- if iwrap = 0, Limit mode: when total index is below 0, then final index is 0.Total index above table length results in a final index of the table length - high out of range total indexes stick at the upper limit of the table. If iwrap not equal to 0, Wrap mode: total index is wrapped modulo the table length so that all total indexes map into the table. For instance, in a table of length 8, xndx = 5 and ixoff = 6 gives a total index of 11, which wraps to a final index of 3. Default is 0.

## Performance

kndx -- Index into table, either a positive number range matching the table length (ixmode = 0) or a 0 to 1 range (ixmode not equal to 0).

xndx -- matching the table length (ixmode = 0) or a 0 to 1 range (ixmode not equal to 0)

kfn -- Table number. Must be >= 1. Floats are rounded down to an integer. If a table number does not point to a valid table, or the table has not yet been loaded (GEN01) then an error will result and the instrument will be de-activated.

| Caution with k-rate table numbers
At k-rate, if a table number of < 1 is given, or the table number points to a non-existent table, or to one which has a length of 0 (it is to be loaded from a file later) then an error will result and the instrument will be deactivated. kfn must be initialized at the appropriate rate using init. Attempting to load an i-rate value into kfn will result in an error.

## Examples

Here is an example of the tableikt opcode. It uses the file tableikt.csd.

Example 1074. Example of the tableikt opcode.

See the sections Real-time Audio and Command Line Flags for more information on using command line flags.

    <CsoundSynthesizer>
    <CsOptions>
    ; Select audio/midi flags here according to platform
    -odac     ;;;realtime audio out
    ;-iadc    ;;;uncomment -iadc if RT audio input is needed too
    ; For Non-realtime ouput leave only the line below:
    ; -o tableikt.wav -W ;;; for file output any platform
    </CsOptions>
    <CsInstruments>

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

    instr 1

    ilowfn	= p4					;lowest ftable wave
    ihighfn	= p5					;highest ftable wave

    kswpenv	line 1, p3, 0				;sweep envelope, calculate current table pair and interpolation amount
    inumtables = ihighfn - ilowfn			;1 less than number of tables
    kfn1	= int(kswpenv*inumtables) + ilowfn
            printks "play table no: %d\n", 1, kfn1
    kfn2	= kfn1 + 1
    kinterp	= frac(kswpenv*inumtables)
    ixmode  = 1					;read tables with phasor
    aphase	phasor	40
    asig	tableikt aphase, kfn1, ixmode		;normalized index
       if kswpenv == 1.0 kgoto skipfn2		;if kfn1 is last table, there is no kfn2
    	asig2	tableikt aphase, kfn2, ixmode
       skipfn2:
       amix	ntrpol	asig, asig2, kinterp		;interpolate between tables and output
    	outs	amix*.5, amix*.5

    endin
    </CsInstruments>
    <CsScore>
    f 1  0 16384 10 1
    f 2  0 16384 10 1 .5
    f 3  0 16384 1 "fox.wav" 0 0 0				;a sample
    f 4  0 16384 10 1 .5 .3 .25 .2 .16 .14 .125 .111	;sawtooth
    f 5  0 16384 10 1 .4 .3 .25 .2
    f 6  0 16384 10 1 .3 .3 .25 .2 .16
    f 7  0 16384 10 1  1  1  1  .7 .5  .3  .1		;pulse
    f 8  0 16384 1 "drumsMlp.wav" 0 0 0			;a sample

    i 1 0 10 1 8
    e
    </CsScore>
    </CsoundSynthesizer>

Its output should include lines like these:

    play table no: 8
    play table no: 7
    play table no: 6
    .....
    play table no: 2
    play table no: 1

## See also

Table Reading with Dynamic Selection

## Credits

Author: Robin Whittle
Australia
May 1997

New in version 3.47

Prev | Up | Next
tableigpw | Home | tableimix