vmap

vmap — Permute les éléments d'un vecteur selon les indices contenus dans un autre vecteur.

Description

Transfert les éléments d'un vecteur vers un autre selon les indices contenus dans ce dernier.

Syntaxe

vmap  ifn1, ifn2, ielements [,idstoffset, isrcoffset]

Initialisation

ifn1 - numéro de la table dans laquelle le signal vectoriel sera copié et qui contient le vecteur d'indices.

ifn2 - numéro de la table hébergeant le signal vectoriel à copier.

ielements - nombre d'éléments à traiter.

idstoffset - décalage d'indexation pour la table de destination ifn1.

isrcoffset - décalage d'indexation pour la table source ifn2.

Exécution

vmap permute les éléments de ifn2 selon les valeurs de la table ifn1. Les éléments de ifn1 sont traités comme indices de la table ifn2, si bien que les valeurs des éléments de ifn1 ne doivent pas dépasser la longueur de la table ifn2, sinon Csound rapportera une erreur. Les éléments de ifn1 sont traités comme des entiers, chaque partie décimale étant tronquée. Il n'y a aucune interpolation lors de cette opération.

En pratique, les éléments de ifn1 sont utilisés comme indices pour ifn2, et sont ensuite remplacés par les éléments correspondants de ifn2. ifn1 doit être différente de ifn2, sinon les résultats sont imprévisibles. Csound générera une erreur d'initialisation si elles ne sont pas différentes.

Tous ce opérateurs (vaddv, vsubv, vmultv, vdivv, vpowv, vexpv, vcopy et vmap) sont conçus pour être utilisés avec d'autres opcodes qui opèrent sur des signaux vectoriels tels que vcella, adsynt, adsynt2, etc.

Exemples

Voici un exemple de l'opcode vmap. Il utilise le fichier vmap.csd.

Exemple 1187. Exemple de l'opcode vmap.

Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.

<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>


Crédits

Ecrit par Gabriel Maldonado.

Nouveau dans Csound 5 (Auparavant seulement disponible dans CsoundAV)