tablecopy

tablecopy — Opcode de copie de table simple et rapide.

Description

Opcode de copie de table simple et rapide.

Syntaxe

tablecopy kdft, ksft

Exécution

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.

Exemples

Voici un exemple de l'opcode tablecopy. Il utilise le fichier tablecopy.csd.

Exemple 868. 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

Voir aussi

tablegpw, tablemix, tableicopy, tableigpw, tableimix

Crédits

Auteur : Robin Whittle
Australie
Mai 1997

Nouveau dans la version 3.47