tableimix

tableimix — Mélange deux tables.

Description

Mélange deux tables.

Syntaxe

tableimix idft, idoff, ilen, is1ft, is1off, is1g, is2ft, is2off, is2g

Initialisation

idft -- Table de fonction destination.

idoff -- Décalage de l'origine de l'écriture. Peut être négatif.

ilen -- Nombre d'opérations d'écriture à réaliser. Une valeur négative signifie écrire avec des indices descendants.

is1ft, is2ft -- Tables de fonction sources. Peuvent être identique à la table destination, si l'on fait attention au sens d'écriture lors de la copie des données.

is1off, is2off -- Décalages de l'origine de la lecture dans les tables sources.

is1g, is2g -- Gains à appliquer lors de la lecture dans les tables source. Les résultats sont additionnés et la somme est écrite dans la table destination.

Exécution

tableimix -- Cet opcode mélange deux tables, avec des gains séparés dans une table destination. L'écriture se fait sur ilen positions, habituellement en avançant dans la table si ilen est positif. S'il est négatif, l'écriture et la lecture se font avec des indices décroissants dans les tables. Cet option bi-directionnelle permet de déplacer facilement le contenu d'une table en lisant et en écrivant dans celle-ci avec un décalage différent.

Si ilen vaut 0, il n'y a pas d'écriture. Noter que la valeur entière interne de ilen est obtenue de la fonction floor() du C ANSI qui retourne l'entier négatif directement inférieur. Ainsi avec une valeur fractionnaire négative de ilen de -2.3 on aura une longueur interne de 3, et la copie commencera à partir des positions décalées et se fera sur deux positions vers la gauche.

L'indice résultant pour la lecture et l'écriture dans les tables est calculé à partir du décalage de l'origine pour chaque table auquel est additionnée la valeur de l'index, qui commence à 0 et augmente ou diminue d'un pas unité tout au long du mixage.

Ces indices résultants peuvent devenir très grands, car il n'y a aucune restriction pour le décalage ou ilen. Cependant l'indice résultant pour chaque table subit un ET logique avec un masque de longueur (tel que 0000 0111 pour une table de longueur 8) pour former l'indice final qui sera utilisé pour la lecture ou l'écriture. Ainsi il ne peut y avoir aucune lecture ou écriture en dehors des tables. C'est la même chose que le mode « wrap » (cyclique) dans la lecture et l'écriture de table. Ces opcoces ne lisent pas ou n'écrivent pas le point de garde. Si une table a été réécrite par l'un de ceux-ci et si elle a un point de garde sensé contenir la même valeur que la position 0, il faut ensuite appeler tableigpw.

Les indices et les décalages sont exprimés en pas de table - ils ne sont pas normalisés entre 0 et 1. Ainsi pour une table de longueur 256, ilen doit être fixé à 256 si toute la table doit être lue ou écrite.

Il n'est pas nécessaire que les tables soient de même longueur - le parcours cyclique se fait individuellement pour chaque table.

Exemples

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

Exemple 1069. Exemple de l'opcode tableimix.

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
-odac   ;;;realtime audio out
;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o tableimix.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

sr = 44100
ksmps = 32
nchnls = 2
0dbfs  = 1

gisine ftgen 1, 0, 256, 10, 1, 0, 0, .4		;sinoid
gisaw  ftgen 2, 0, 1024, 7, 0, 256, 1		;saw
gimix  ftgen 100, 0, 256, 7, 0, 256, 1		;used to mix

instr 1

      tableimix 100, 0, 256, 1, 0, 1, 2, 0, .5
asig  poscil .5, 110, gimix			;mix table 1 & 2			
      outs   asig, asig

endin
</CsInstruments>
<CsScore>

i1 0 5
e
</CsScore>
</CsoundSynthesizer>


Voir aussi

tablecopy, tablegpw, tablemix, tableicopy, tableigpw

Crédits

Auteur : Robin Whittle
Australie
Mai 1997

Nouveau dans la version 3.47