tablefilteri — Filtre une table source et écrit le résultat dans une table de destination.
On peut utiliser cet opcode pour filtrer les valeurs de tables de fonction selon certains algorithmes. La sortie filtrée est écrite dans une table de destination et le nombre d'éléments qui ont passé le filtre est retourné.
inumpassed -- le nombre d'éléments qui ont passé le filtre.
iouttable -- le numéro de la table contenant les valeurs qui sont passées.
iintatble -- le numéro de la table à filtrer.
imode -- mode du filtre :
iparam -- entier, paramètre de seuil pour le filtre. Cela signifie que les dénominateurs dont le poids est plus lourd que celui de ce seuil ne passent pas à travers le filtre. Le poids d'un entier est calculé au moyen de la fonction de Clarence Barlow d'indigestibilité d'un nombre. Selon cette fonction, les grands nombres premiers contribuent à un accroissement du poids de tout nombre entier naturel qu'ils divisent. L'ordre des 16 premiers entiers selon leur indigestibilité est : 1, 2, 4, 3, 8, 6, 16, 12, 9, 5, 10, 15, 7, 14.
Voici un exemple de l'opcode tablefilteri. Il utilise le fichier tablefilter.csd.
Exemple 1066. Exemple de l'opcode tablefilteri.
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> </CsOptions> <CsInstruments> sr=44100 ksmps=10 nchnls=1 gifarn init 8 ; initialise integer for Farey Sequence F_8 gires fareyleni gifarn ; calculate length of F_8, returns 23 ; the table length won't be a power of 2 ; (The length of a Farey Sequence with n > 1 is always odd) gilen init gires * -1 gifarey ftgen 200, 0, gilen, "farey", gifarn, 0 ; initialize destiniation table with 0s gifiltered ftgen 0, 0, gilen, 21, 1, 0 ; initialize second destiniation table with 0s gifiltered2 ftgen 0, 0, gilen, 21, 1, 0 ; table filtering opcode: dest. source, mode, threshold ginumpassed tablefilteri gifiltered, gifarey, 1, 6 ; the threshold parameter indicates that denominators whose weights are heavier ; than 6 are not passing through the filter. The weight is calculated using ; Clarence Barlow's function of indigestibility of a number. According to this function, ; higher prime numbers contribute to an increased weight of any natural integer they divide. ; ginumpassed is the number of elements from the source table 'gifarey' ; that have passed the test and which have been copied to the destination table 'gifiltered' ; apply a different filter: ginumpassed2 tablefilteri gifiltered2, gifarey, 2, 5 ; In mode=2 we again test the digestibility of the denominators of the ; fractions in the source table. ; The difference to mode=1 is that we now let pass only vaules from the ; source that are as heavy as the threshold or greater. instr 4 kndx init 0 ; read out elements of now filtered F_8 sequentially and print to file if (kndx < ginumpassed) then kelem tab kndx, gifiltered fprintks "fareyfilter_lp.txt", "%2.6f\\n", kelem kndx = kndx+1 endif endin instr 5 kndx init 0 ; read out elements and print to file if (kndx < ginumpassed2) then kelem tab kndx, gifiltered2 fprintks "fareyfilter_hp.txt", "%2.6f\\n", kelem kndx = kndx+1 endif endin </CsInstruments> <CsScore> i4 0 1 i5 0 1 e </CsScore> </CsoundSynthesizer>