tableiw — Obsolète.
isig -- Valeur d'entrée à écrire dans la table.
indx -- Indice dans la table, un nombre positif compris entre 0 et la longueur de la table (ixmode = 0) ou entre 0 et 1 (ixmode différent de 0).
ifn -- Numéro de la table. Doit être >= 1. Les nombres flottants sont arrondis à l'entier inférieur. Si un numéro de table ne pointe pas vers une table valide, ou si la table n'a pas encore été chargée (GEN01) une erreur est générée et l'instrument est désactivé.
ixmode (facultatif, 0 par défaut) -- mode d'indexation.
0 = indx et ixoff sont compris entre 0 et la longueur de la table.
différent de 0 = indx et ixoff sont compris entre 0 et 1.
ixoff (facultatif, 0 par défaut) -- décalage de l'index.
0 = l'indice résultant est contrôlé directement par indx, l'indexation commençant depuis le début de la table.
Différent de 0 = l'indexation démarre dans la table. La valeur doit être positive et inférieure à la longueur de la table (ixmode = 0) ou inférieure à 1 (ixmode différent de 0).
iwgmode (facultatif, 0 par défaut) -- mode cyclique et point de garde.
0 = mode limite.
1 = mode cyclique.
2 = mode point de garde.
Limite l'indice résultant (indx + ixoff) entre 0 et le point de garde. Pour une table de longueur 5, cela signigie que les positions allant de 0 à 3 et la position 4 (le point de garde) peuvent être écrites. Un indice résultant négatif provoque l'écriture en position 0.
Parcours cyclique de l'indice résultant dans les positions 0 à E, où E vaut soit la longueur de la table moins un, soit le facteur de 2 qui est égal à la longueur de la table moins un. Par exemple, un parcours cyclique entre 0 et 3, si bien que l'indice 6 signifie une écriture dans la position 2.
Le point de garde est écrit en même temps que la position 0 avec la même valeur.
Facilite l'écriture dans des tables prévues pour être lues avec interpolation pour produire des formes d'onde cycliques sans discontinuité. De plus, avant son utilisation, l'indice résultant est augmenté de la moitié de la distance entre une position et la suivante, avant d'être arrondi à l'adresse entière inférieure d'une position dans la table.
Normalement (iwgmode = 0 ou 1), pour une table de longueur 5, qui comprend les positions 0 à 3 en partie principale et la position 4 comme point de garde, un indice résultant compris entre 0 et 0.999 provoquera une écriture dans la position 0. ("0.999" signifie juste inférieur à 1.0), entre 1.0 et 1.999, l'écriture se fera dans la position 1, etc. La même interprétation a lieu pour les indices résultants compris entre 0 et 4.999 (igwmode = 0) ou 3.999 (igwmode = 1). igwmode = 0 permet l'écriture dans les positions 0 à 4, avec la possibilité d'avoir dans le point de garde (4) une valeur différente de celle de la position 0.
Avec une table de longueur 5 et iwgmode = 2, quand l'indice résultant est compris entre 0 et 0.499, l'écriture se fera dans les positions 0 et 4. S'il est compris entre 0.5 et 1.499, l'écriture se fera dans la position 1, etc. S'il est compris entre 3.5 et 4.0, l'écriture se fera également dans les positions 0 et 4.
Ainsi, l'écriture s'approche le plus possible des résultats de la lecture avec interpolation. Le mode point de garde ne doit être utilisé qu'avec des tables qui ont un point de garde.
Le mode point de garde se fait en ajoutant 0.5 à l'indice résultant, en l'arrondissant à l'entier inférieur le plus proche, puis en le réduisant modulo le facteur de deux égal à la longueur de la table moins un, enfin en écrivant dans la table (positions 0 à 3 dans notre exemple) et dans le point de garde si l'indice vaut 0.
Voici un exemple de l'opcode tableiw. Il utilise le fichier tableiw.csd.
Exemple 1340. Exemple de l'opcode tableiw.
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 tableiw.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 seed 0 ;generate new values every time the instr is played instr 1 ifn = p4 isize = p5 ithresh = 0.5 itemp ftgen ifn, 0, isize, 21, 2 iwrite_value = 0 i_index = 0 loop_start: iread_value tablei i_index, ifn if iread_value > ithresh then iwrite_value = 1 else iwrite_value = -1 endif tableiw iwrite_value, i_index, ifn loop_lt i_index, 1, isize, loop_start turnoff endin instr 2 ifn = p4 isize = ftlen(ifn) prints "Index\tValue\n" i_index = 0 loop_start: ivalue tablei i_index, ifn prints "%d:\t%f\n", i_index, ivalue loop_lt i_index, 1, isize, loop_start ;read table 1 with our index aout oscili .5, 100, ifn ;use table to play the polypulse outs aout, aout endin </CsInstruments> <CsScore> i 1 0 1 100 16 i 2 0 2 100 e </CsScore> </CsoundSynthesizer>
Plus d'information sur cet opcode : http://www.csoundjournal.com/issue12/genInstruments.html , écrit par Jacob Joaquin.