Instruction f (ou instruction de table de fonction)

f — Provoque l'écriture de valeurs dans une table de fonction en mémoire par une routine GEN.

Description

Provoque l'écriture de valeurs dans une table de fonction en mémoire par une routine GEN pour utilisation par des instruments.

Syntaxe

f p1  p2  p3  p4  p5 ... PMAX

Exécution

p1 -- Numéro de table sous lequel la fonction mémorisée sera connue. Un nombre négatif signifie une demande de destruction de la table.

p2 -- Date d'activation de la génération de la fonction (ou de sa destruction) en pulsations.

p3 -- Taille de la table de la fonction (c'est-à-dire nombre de points). Doit être une puissance de 2, ou une puissance de 2 plus 1 si ce nombre est positif. La taille de table maximale est de 16777216 (224) points.

p4 -- Numéro de la routine GEN à appeler (voir ROUTINES GEN). Une valeur négative supprimera la normalisation.

p5 ... PMAX -- Paramètres dont la signification est déterminée par la routine GEN particulière.

Considérations spéciales

Les tables de fonction sont des tableaux de valeurs en virgule flottante. On peut créer une simple onde sinusoïdale avec cette ligne :

f 1 0 1024 10 1

Cette table utilise GEN10 pour son remplissage.

Historiquement, à cause des contraintes des anciennes plates-formes, Csound ne pouvait accepter que des tables dont la taille était une puissance de deux. Cette limitation a été levée dans les récentes versions, et l'on peut créer des tables de n'importe quelle taille. Cependant, pour créer une table dont la taille n'est pas une puissance de deux (ou une puissance de deux plus un), il faut spécifier la taille comme un nombre négatif.

[Note] Note

Il y a des opcodes qui n'accepteront pas des tables dont la taille n'est pas une puissance de deux, car ils comptent sur cela pour leur optimisation interne.

Pour les tableaux dont la longueur est une puissance de 2, l'allocation d'espace mémoire est toujours prévue pour 2n points plus un point de garde. La valeur du point de garde, utilisée pour la lecture avec interpolation, peut être fixée automatiquement selon le but de la table : si la taille est une puissance de 2 exacte, le point de garde sera une copie du premier point ; cela convient pour la lecture cyclique avec interpolation comme dans oscili, etc., et devrait même être utilisé pour la version sans interpolation oscil pour rester consistant. Si la taille est fixée à 2n + 1, le point de garde prolongera automatiquement le contour des valeurs de la table ; cela convient pour les fonctions à lecture non-cyclique comme dans envplx, oscil1, oscil1i, etc.

La taille de la table est utilisée comme un code pour indiquer à Csound comment remplir ce point de garde. Si la taille est exactement une puissance de deux, alors le point de garde contient une copie du premier point de la table. Si la taille est une puissance-de-deux plus un, Csound étend le contour de la fonction stockée dans la table pour un point supplémentaire.

Les tables sont allouées dans la mémoire primaire, avec les données d'instrument. Le nombre maximum de tables était limité à 200. Ceci a changé et il n'est plus limité que par la quantité de mémoire disponible. (Actuellement il y a une limitation logicielle de 300, qui est augmentée automatiquement selon les besoins).

On peut supprimer une table de fonction existante par une instruction f contenant un p1 négatif et une date d'activation adéquate. Une table de fonction est également supprimée par la génération d'une autre table avec le même p1. Les fonctions ne sont pas automatiquement effacées à la fin d'une section de partition.

La date p2 est traitée de la même manière que dans l'instruction i en tenant compte du tri et des modifications par les instructions t. Si une instruction f et une instruction i ont le même p2, le tri donnera la priorité à l'instruction f afin que le table de fonction soit disponible pendant l'initialisation de la note.

[Avertissement] Avertissement

Le nombre maximum de p-champs acceptés dans la partition est déterminé par PMAX (une variable de compilation). PMAX vaut actuellement 1000. Cela peut éliminer des valeurs entrées au moyen de GEN02. Pour contourner cette limitation, utiliser GEN23 ou GEN28 pour lire les valeurs à partir d'un fichier.

On peut utiliser une instruction f 0 (avec zéro en p1 et p2 positif) pour créer une date sans action associée. De tels marqueurs temporels sont utiles pour remplir une section de partition (voir l'instruction s) et pour lancer une exécution de Csound à partir d'évènements en temps réel (par exemple en n'utilisant que des entrées MIDI sans évènements de partition). La durée indique le nombre de secondes de l'exécution de Csound. Si l'on veut que Csound tourne pendand 10 heures, on utilisera :

f0 36000

La manière la plus simple de remplir une table (f1) avec des 0 est :

f1 0 xx 2 0

where xx = table size.

La manière la plus simple de remplir une table (f1) avec n'importe quelle valeur unique est :

f1 0 xx -7 yy xx yy

où xx = taille de la table et yy = n'importe quelle valeur unique

Dans les deux exemple ci-dessus, la taille de la table (p3) doit être une puissance de 2 ou une puissance-de-2 + 1.

Voir aussi

ROUTINES GEN

Crédits

Mise à jour en août 2002 grâce à une note de Rasmus Ekman. Il n'y a plus de limite codée en dur à 200 tables de fonction.