tablecopy
Simple, fast table copy opcode.
Syntax
kdft -- Destination function table.
ksft -- Number of source function table.
tablecopy -- Simple, fast table copy opcode. Takes the table length from the destination table, and reads from the start of the source table. For speed reasons, does not check the source length - just copies regardless - in “wrap” mode. This may read through the source table several times. A source table with length 1 will cause all values in the destination table to be written to its value.
tablecopy cannot read or write the guardpoint. To read it use table, with ndx = the table length. Likewise use table write to write it.
To write the guardpoint to the value in location 0, use tablegpw.
This is primarily to change function tables quickly in a real-time situation.
Examples
Here is an example of the tablecopy opcode. It uses the file tablecopy.csd.
Example of the tablecopy opcode. |
---|
| <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 tablecopy.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>
sr = 44100
ksmps = 32
nchnls = 2
0dbfs = 1
;after an example from Jonathan Murphy
gilen = 7
gilist ftgen 1, 0, gilen + 1, -2, 2, 3, 4, 5, 6, 7 ;only 6 elements, so 1 is doubled
gitmp ftgen 2, 0, gilen + 1, -2, 0 ;empty table
gkmax init gilen
seed 0 ;each time different
instr 1
ktrig metro 3 ;trigger values
krnd random 0, gkmax
if (ktrig == 1) then
kval table krnd, gilist
tablew 0, krnd, gilist
kread = 0
kwrite = 0
start:
knew table kread, gilist
if (knew != 0) then
tablew knew, kwrite, gitmp
kwrite = kwrite + 1
endif
kread = kread + 1
if (kread <= gilen) kgoto start
tablecopy gilist, gitmp ;fill with zeroes
gkmax = gkmax - 1
endif
printk2 kval
if (gkmax < 0) then
event "i", 2, 0, 1/kr ;when ready, then stop
endif
asig vco2 .5, 40*kval ;sound generation
outs asig, asig
endin
instr 2
exitnow
endin
</CsInstruments>
<CsScore>
i1 0 5
e
</CsScore>
</CsoundSynthesizer>
|
Its output should include a lines like these:
i1 5.00000
i1 3.00000
i1 2.00000
i1 4.00000
i1 7.00000
i1 6.00000
i1 7.00000
See also
Read/Write Operations
Credits
Author: Robin Whittle
Australia
May 1997
New in version 3.47