vaddv

vaddv — Addition entre deux signaux vectoriels de contrôle.

Description

Addition entre deux signaux vectoriels de contrôle.

Syntaxe

vaddv  ifn1, ifn2, kelements [, kdstoffset] [, ksrcoffset] [,kverbose]

Initialisation

ifn1 - numéro de la table hébergeant le premier vecteur à traiter.

ifn2 - numéro de la table hébergeant le second vecteur à traiter.

Exécution

kelements - nombre de composantes des deux vecteurs.

kdstoffset - décalage d'indexation pour la table de destination ifn1 (vaut 0 par défaut).

ksrcoffset - décalage d'indexation pour la table source ifn2 (vaut 0 par défaut).

kverbose - Indique si les avertissements sont affichés (vaut 0 par défaut).

vaddv additionne deux signaux vectoriels de contrôle, chaque composante du premier vecteur n'étant traitée qu'avec la composante correspondante de l'autre vecteur. Chaque signal vectoriel est hébergé dans une table (ifn1 et ifn2). Le nombre de composantes de chaque vecteur doit être identique.

Le résultat est un nouveau signal vectoriel de contrôle qui écrase les anciennes valeurs de ifn1. Si l'on veut garder l'ancien vecteur ifn1, il faut utiliser l'opcode vcopy_i pour le copier dans une autre table. On peut utiliser kdstoffset et ksrcoffset pour spécifier des vecteurs à n'importe quelle position dans les tables.

Des valeurs négatives pour kdstoffset et ksrcoffset sont acceptables. Si kdstoffset est négatif, la partie du vecteur hors-limites est ignorée. Si ksrcoffset est négatif, les éléments hors-limites seront supposés valoir 0 (c'est-à-dire que les éléments de destination ne seront pas changés). Si des éléments pour le vecteur de destination sont au-delà de la taille de la table (point de garde inclus), ces éléments sont ignorés (les éléments ne sont pas repliés autour des tables). Si des éléments pour le vecteur source sont au-delà de la longueur de la table, ces éléments sont supposés valoir 0 (le vecteur de destination ne sera pas changé pour ces éléments).

[Avertissement] Avertissement

L'utilisation de la même table comme source et comme destination dans les versions antérieures à la 5.04 peut induire un comportement imprévu. A utiliser avec précaution.

Cet opcode travaille au taux-k (cela signifie qu'à chaque passe-k les vecteurs sont additionnés). Il y a une version de taux-i de cet opcode appelée vaddv_i.

[Note] Note

Prière de noter que l'argument elements a changé dans la version 5.03 du taux-i au taux-k. Cela change le comportement de l'opcode dans le cas inhabituel où la variable de taux-i ielements est modifiée à l'intérieur de l'instrument, par exemple dans :

    instr 1
ielements  =        10
           vadd     1, 1, ielements
ielements  =        20
           vadd     2, 1, ielements
           turnoff
    endin

Tous ces 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 vaddv. Il utilise le fichier vaddv.csd.

Exemple 1144. Exemple de l'opcode vaddv.

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     -nm0 ;;;RT audio I/O
; For Non-realtime ouput leave only the line below:
; -o cigoto.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>


sr=44100
ksmps=128
nchnls=2

  opcode TableDumpSimp, 0, ijo
;prints the content of a table in a simple way
ifn, iprec, ippr   xin; function table, float precision while printing (default = 3), parameters per row (default = 10, maximum = 32)
iprec		=		(iprec == -1 ? 3 : iprec)
ippr		=		(ippr == 0 ? 10 : ippr)
iend		=		ftlen(ifn)
indx		=		0
Sformat	sprintf	"%%.%df\t", iprec
Sdump		=		""
loop:
ival		tab_i		indx, ifn
Snew		sprintf	Sformat, ival
Sdump		strcat		Sdump, Snew
indx		=		indx + 1
imod		=		indx % ippr
	if imod == 0 then
		puts		Sdump, 1
Sdump		=		""
	endif
	if indx < iend igoto loop
		puts		Sdump, 1
  endop

	instr 1
ifn1 = p4
ifn2 = p5
ielements = p6
idstoffset = p7
isrcoffset = p8
kval init 25
vaddv ifn1, ifn2, ielements, idstoffset, isrcoffset, 1
turnoff
	endin

	instr 2
TableDumpSimp p4, 3, 16
	endin

</CsInstruments>
<CsScore>

f 1 0 16 -7 1 15 16

f 2 0 16 -7 1 15 2


i2	0.0	0.2	1
i2	0.2	0.2	2
i1	0.4	0.01	1	2	5	3	8	
i2	0.8	0.2	1
i1	1.0	0.01	1	2	5	10	-2	
i2	1.2	0.2	1
i1	1.4	0.01	1	2	8	14	0	
i2	1.6	0.2	1
i1	1.8	0.01	1	2	8	0	14	
i2	2.0	0.2	1	
i1	2.2	0.002	1	1	8	5	2	
i2	2.4	0.2	1
e


</CsScore>
</CsoundSynthesizer>


Crédits

Ecrit par Gabriel Maldonado. Arguments facultatifs ajoutés par Andrés Cabrera et Istvan Varga.

Nouveau dans Csound 5 (Auparavant seulement disponible dans CsoundAV)