ftset

ftset — Fixe plusieurs éléments d'une table à une valeur donnée.

Description

Fixe plusieurs éléments d'une table à une valeur donnée. Tous les éléments de la table (début:fin:pas) peuvent être fixés en une fois. Si tous les paramètres sont des variables de taux-i, il ne s'exécute que pendant l'initialisation. Sinon ftset est exécuté à chaque cycle.

Opcode de greffon dans emugens.

Syntaxe

ftset ktablenum, kvalue [, kstart=0, kend=0, kstep=1 ]
ftset itablenum, ivalue [, istart=0, iend=0, istep=1 ]

Initialisation

Exécution

ktablenum -- le numéro de la table à modifier

kvalue -- la valeur à écrire dans la table

kstart -- l'indice de la première position à modifier (0 par défaut)

kend -- l'indice de la dernière position à modifier. Vaut 0 par défaut, ce qui indique la fin de la table. On peut utiliser un indice négatif pour compter à partir de la fin, ainsi, par exemple -1 modifiera la table sans changer le dernier élément.

kstep -- l'incrément à utiliser entre les indices des positions à modifier. Vaut 1 par défaut, ce qui signifie la modification de chaque élément entre start et end

Exemples

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

Exemple 389. Exemple de l'opcode ftset.

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>

; Example file ftset

/*

ftset: 

Write a value to the whole table, or a slice of it.

Syntax:

ftset ktablenum, kvalue, kstart=0, kend=0, kstep=1
ftset itablenum, ivalue, istart=0, iend=0, istep=1

ktablenum / itablenum: 
table to be modified

kvalue / ivalue: 
value to write to the table

kstart / istart: 
    the index to start modifying

kend / iend: 
   the end index to stop modifying. This is NOT inclusive. 0=end of table
   Any negative index will be interpreted as counting from the end of the 
   table, so -2 will modify the whole table but the last two elements 

kstep / istep: 
    how many elements to skip

See also: tablecopy, tableicopy, tab2array
*/

instr 1
  ; clear the table
  itable ftgentmp 0, 0, 13, -2,  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
  ftset itable, 0
  ; print it at perf-time
  ftprint itable, -1
  turnoff
endin

instr 2
  ; Set all elements but the last 5 to 99
  itable ftgentmp 0, 0, 13, -2,  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12

  ftset itable, 99, 0, -5
  ftprint itable, -1
  turnoff
endin

instr 3
  ; ftset works at k-time so it can be used inside an if clause
  ; Set all even elements to 0 at the 10th k-cycle
  itable ftgentmp 0, 0, 10, -2,  0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  kcycle = timeinstk()
  if kcycle == 10 then
    ftset itable, 0, 0, 0, 2
  endif
  println "cycle num: %d", kcycle
  ftprint itable, -1  ; print at each cycle
  ; turnoff the instrument if table was indeed modified
  if tab:k(6, itable) == 0 then
    println "Table was modified, turning off"
    turnoff
  endif
endin

</CsInstruments>
<CsScore>
i 1 0   0.1
i 2 +   0.1
i 3 +   0.1

</CsScore>
</CsoundSynthesizer>


Crédits

Par : Eduardo Moguillansky 2020