vmap — Maps elements from a vector according to indeces contained in another vector
ifn1 - number of the table where the vectorial signal will be copied, and which contains the mapping vector
ifn2 - number of the table hosting the vectorial signal to be copied
ielements - number of elements to process
idstoffset - index offset for destination table (ifn1)
isrcoffset - index offset for source table (ifn2)
vmap maps elements of ifn2 according to the values of table ifn1. Elements of ifn1 are treated as indexes of table ifn2, so element values of ifn1 must not exceed the length of ifn2 table otherwise a Csound will report an error. Elements of ifn1 are treated as integers, so any fractional part will be truncated. There is no interpolation performed on this operation.
In practice, what happens is that the elements of ifn1 are used as indeces to ifn2, and then are replaced by the corresponding elements from ifn2. ifn1 must be different from ifn2, otherwise the results are unpredictable. Csound will produce an init error if they are not.
All these operators (vaddv,vsubv,vmultv,vdivv,vpowv,vexpv, vcopy and vmap) are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2 etc.
Note: bmscan not yet available on Canonical Csound
Here is an example of the vmap opcode. It uses the file vmap.csd.
Example 497. Example of the vmap 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 ; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o vmap.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ksmps = 256 nchnls = 2 gisize = 64 gitable ftgen 0, 0, gisize, 10, 1 ;Table to be processed gimap1 ftgen 0, 0, gisize, -7, gisize-1, gisize-1, 0 ; Mapping function to reverse table gimap2 ftgen 0, 0, gisize, -5, 1, gisize-1, gisize-1 ; Mapping function for PWM gimap3 ftgen 0, 0, gisize, -7, 1, (gisize/2)-1, gisize-1, 1, 1, (gisize/2)-1, gisize-1 ; Double frequency instr 1 ;Hear an oscillator using gitable asig oscil 10000, 440, gitable outs asig,asig endin instr 2 ;Reverse the table (no sound change, except for a single click vmap gimap1, gitable, gisize vcopy_i gitable, gimap1, gisize turnoff endin instr 3 ;Non-interpolated PWM (or phase waveshaping) vmap gimap2, gitable, gisize vcopy_i gitable, gimap2, gisize turnoff endin instr 4 ;Double frequency vmap gimap3, gitable, gisize vcopy_i gitable, gimap3, gisize turnoff endin </CsInstruments> <CsScore> i 1 0 8 i 2 2 1 i 3 4 1 i 4 6 1 e </CsScore> </CsoundSynthesizer>