vtablewa — Write vectors (to tables -or arrays of vectors).
ixmode - index data mode. The default value is 0.
== 0 index is treated as a raw table location,
== 1 index is normalized (0 to 1).
andx - Index into f-table, either a positive number range matching the table length (ixmode = 0) or a 0 to 1 range (ixmode != 0).
kfn - table number
ainarg1...ainargN - input vector elements
This opcode is useful in all cases in which one needs to write sets of values associated to unique indexes (for example, multi-channel samples, STFT bin frames, spectral formants, p-field based scores etc.). The number of elements of each vector (length of the vector) is determined by the number of optional arguments on the right (ainarg1 , ainarg2, ainarg3, .... ainargN).
vtablewa allows also to switch the table number at k-rate (but this is possible only when vector frames of each used table have the same number of elements, otherwise unpredictable results could occurr), as well as to choose indexing style (raw or normalized, see also ixmode argument of table opcode ).
Notice that no wrap nor limit mode is implemented. So, if an index attempt to access to a zone not allocated by the table, Csound will probably crash. However this drawback can be easily avoided by using wrap or limit opcodes applied to indexes before using vtablewa, in order to correct eventual out-of-range values.
Here is an example of the vtablewa opcode. It uses the files vtablewa.csd.
Example 1038. Example of the vtablewa opcode.
<CsoundSynthesizer> <CsOptions> -odac -b441 -B441 </CsOptions> <CsInstruments> sr=44100 kr=4410 ksmps=10 nchnls=2 0dbfs = 1 instr 1 vcopy 2, 1, 262144 ar random 0, 1 vtablewa ar,2,1,ar out ar,ar endin </CsInstruments> <CsScore> f1 0 262144 -1 "beats.wav" 0 4 0 f2 0 262144 2 0 i1 0 4 </CsScore> </CsoundSynthesizer>