tablew

tablew — Change le contenu de tables de fonction existantes.

Description

Cet opcode opère sur des tables de fonction existantes en changeant leur contenu. tablew sert à l'écriture au taux-k ou au taux-a, le numéro de table étant spécifié durant l'initialisation. L'utilisation de tablew avec un signal et des valeurs d'indice de taux-i est permise, mais les données spécifiées seront toujours écrites dans la table de fonction au taux-k, pas durant la passe d'initialisation. Les combinaisons valides des types de variable sont indiquées par la première lettre des noms de variable.

Syntaxe

tablew asig, andx, ifn [, ixmode] [, ixoff] [, iwgmode]
tablew isig, indx, ifn [, ixmode] [, ixoff] [, iwgmode]
tablew ksig, kndx, ifn [, ixmode] [, ixoff] [, iwgmode]

Initialisation

asig, isig, ksig -- La valeur à écrire dans la table.

andx, indx, kndx -- 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 = xndx et ixoff sont compris entre 0 et la longueur de la table.

  • différent de 0 = xndx 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 xndx, 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.

Exécution

Mode limite (0)

Limite l'indice résultant (xndx + 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.

Mode cyclique (1)

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.

Mode point de garde (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.

tablew ne retourne pas de valeur. Les trois derniers paramètres sont facultatifs et valent 0 par défaut.

Avertissement pour les numéros de table de taux-k

Au taux-k ou au taux-a, si l'on donne un numéro de table < 1, ou si le numéro de table pointe vers une table inexistante ou vers une table de longueur nulle (qui doit être chargée depuis un fichier ultérieurement), une erreur est générée et l'instrument est désactivé. Il faut initialiser kfn et afn au taux approprié en utilisant init. Si l'on essaie de mettre une valeur de taux-i dans kfn ou dans afn une erreur est générée.

[Avertissement] Avertissement

Noter que tablew est toujours un opcode de taux-k. Cela signifie que même sa version de taux-i est exécutée au taux-k et écrit la valeur de la variable de taux-i. Pour cette raison, le code suivant ne se comportera pas comme prévu :

<CsoundSynthesizer>
<CsOptions>
</CsOptions>
<CsInstruments>
giFt ftgen  1, 0, 8, 2, 0
instr 1
indx = 0
     tablew 10, indx, giFt
ival tab_i  indx, giFt
     print  ival
endin
</CsInstruments>
<CsScore>
i 1 0 1
</CsScore>
</CsoundSynthesizer>

Alors que l'on s'attend à ce que ce programme imprime un 10 sur la console, il imprimera 0 car tab_i lit la valeur à l'initialisation de la note, avant la première passe d'exécution durant laquelle tablew écrit sa valeur.

Voir aussi

tableiw, tablewkt

Crédits

Auteur : Robin Whittle
Australie
Mai 1997