tablecopy — Opcode de copie de table simple et rapide.
kdft -- Table de fonction destination.
ksft -- Numéro de la table de fonction source.
tablecopy -- Opcode de copie de table simple et rapide. Il prend la longueur de la table destination et lit à partir du début de la table source. Pour aller vite, il ne teste pas la longueur de la source - il copie quoiqu'il arrive - en mode « cyclique ». Ainsi, la table source peut-être lue plusieurs fois. Avec une table source de longueur 1, toutes les positions de la tables destination recevront son unique valeur.
tablecopy ne peut pas lire ou écrire le point de garde. Pour le lire, il faut utiliser table, avec ndx = la longueur de la table. De même, il faut utiliser une écriture de table pour l'écrire.
Pour écrire le point de garde avec la valeur de la position 0, utiliser tablegpw.
Cet opcode sert principalement à changer les tables de fonction rapidement dans une situation de temps réel.
Voici un exemple de l'opcode tablecopy. Il utilise le fichier tablecopy.csd.
Exemple 1064. Exemple de l'opcode tablecopy.
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 tablecopy.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 ;after an example from Jonathan Murphy gilen = 7 gilist ftgen 1, 0, gilen + 1, -2, 2, 3, 4, 5, 6, 7 ;only 6 elements, so 1 is doubled gitmp ftgen 2, 0, gilen + 1, -2, 0 ;empty table gkmax init gilen seed 0 ;each time different instr 1 ktrig metro 3 ;trigger values krnd random 0, gkmax if (ktrig == 1) then kval table krnd, gilist tablew 0, krnd, gilist kread = 0 kwrite = 0 start: knew table kread, gilist if (knew != 0) then tablew knew, kwrite, gitmp kwrite = kwrite + 1 endif kread = kread + 1 if (kread <= gilen) kgoto start tablecopy gilist, gitmp ;fill with zeroes gkmax = gkmax - 1 endif printk2 kval if (gkmax < 0) then event "i", 2, 0, 1/kr ;when ready, then stop endif asig vco2 .5, 40*kval ;sound generation outs asig, asig endin instr 2 exitnow endin </CsInstruments> <CsScore> i1 0 5 e </CsScore> </CsoundSynthesizer>
Sa sortie contiendra des lignes comme celles-ci :
i1 5.00000 i1 3.00000 i1 2.00000 i1 4.00000 i1 7.00000 i1 6.00000 i1 7.00000