gir -- either a requested or automatically assigned table number above 100.
ifn -- requested table number If ifn is zero, the number is assigned automatically and the value placed in gir. Any other value is used as the table number
itime -- is ignored, but otherwise corresponds to p2 in the score f statement.
isize -- table size. Corresponds to p3 of the score f statement.
igen -- function table GEN routine. Corresponds to p4 of the score f statement.
iarga, iargb, ... -- function table arguments. Correspond to p5 through p_n_ of the score f statement.
iarray -- ane dimensionl array holding the function table arguments. Correspond to p5 through pn of the score f statement.
Performance
This is equivalent to table generation in the score with the f statement.
Note
Csound was originally designed to support tables with power of two sizes only. Though this has changed in recent versions (you can use any size by using a negative number), many opcodes will not accept them.
Warning
Although Csound will not protest if ftgen is used inside instr-endin statements, this is not the intended or supported use, and must be handled with care as it has global effects. (In particular, a different size usually leads to relocation of the table, which may cause a crash or otherwise erratic behaviour).
Examples
Here is an example of the ftgen opcode. It uses the file ftgen.csd.
<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 ftgen.wav -W ;;; for file output any platform</CsOptions><CsInstruments>sr=44100ksmps=32nchnls=20dbfs=1gisineftgen1,0,16384,10,1;sine wavegisquareftgen2,0,16384,10,1,0,.33,0,.2,0,.14,0,.11,0,.09;odd harmonicsgisawftgen3,0,16384,10,0,.2,0,.4,0,.6,0,.8,0,1,0,.8,0,.6,0,.4,0,.2;even harmonicsinstr1ifn=p4asigposcil.6,200,ifnoutsasig,asigendin</CsInstruments><CsScore>i1021;sine wavei1322;odd harmonicsi1623;even harmonicse</CsScore></CsoundSynthesizer>
Here is another example of the ftgen opcode. It uses the file ftgen-2.csd.
<CsoundSynthesizer><CsOptions>; Select audio/midi flags here according to platform; Audio out Audio in-odac -iadc ;;;RT audio I/O; For Non-realtime ouput leave only the line below:; -o ftgen-2.wav -W ;;; for file output any platform</CsOptions><CsInstruments>sr=48000ksmps=16nchnls=2;Example by Jonathan Murphy 20070dbfs=1instr1Sfile="drumsMlp.wav"ilenfilelenSfile; Find lengthisrfilesrSfile; Find sample rateisamps=ilen*isr; Total number of samplesisizeinit1loop:isize=isize*2; Loop until isize is greater than number of samplesif(isize<isamps)igotoloopitabftgen0,0,isize,1,Sfile,0,0,0printisizeprintisampsturnoffendin</CsInstruments><CsScore>i1010e</CsScore></CsoundSynthesizer>