tablemix — Mélange deux tables.
kdft -- Table de fonction destination.
kdoff -- Décalage de l'origine de l'écriture. Peut être négatif.
klen -- Nombre d'opérations d'écriture à réaliser. Une valeur négative signifie écrire avec des indices descendants.
ks1ft, ks2ft -- 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.
ks1off, ks2off -- Décalages de l'origine de la lecture dans les tables sources.
ks1g, ks2g -- 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.
tablemix -- Cet opcode mélange deux tables, avec des gains séparés dans une table destination. L'écriture se fait sur klen positions, habituellement en avançant dans la table si klen 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 klen vaut 0, il n'y a pas d'écriture. Noter que la valeur entière interne de klen 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 klen 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 klen. 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 tablegpw afterwards.
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, klen 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.
Voici un exemple de l'opcode tablemix. Il utilise le fichier tablemix.csd.
Exemple 1071. Exemple de l'opcode tablemix.
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 tablemix.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 gisinoid 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 ;destination table instr 1 kgain linseg 0, p3*.5, .5, p3*.5, 0 tablemix 100, 0, 256, 1, 0, 1, 2, 0, kgain asig poscil .5, 110, gimix ;mix table 1 & 2 outs asig, asig endin </CsInstruments> <CsScore> i1 0 10 e </CsScore> </CsoundSynthesizer>