ftset

ftset — Sets multiple elements of a table to a given value

Description

Sets multiple elements of a table to a given value. All elements of the table, or a slice (start:end:step) can be set at once. If all parameters are i-time variables, ftset will run only at init-time. Otherwise ftset is executed at each cycle.

Plugin opcode in emugens

Syntax

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

Initialization

Performance

ktablenum -- the number of the table to be modified

kvalue -- the value to write to the table

kstart -- the start index to modify (defaults to 0)

kend -- the end index to modify. Defaults to 0, which indicates the end of the table. A negative index can be used to count from the end, so for example -1 will modifiy the table without changing the last element.

kstep -- the increment to use between modified indexes. Defaults to 1, which means to modify every element between start and end

Examples

Here is an example of the ftset opcode. It uses the file ftset.csd.

Example 400. Example of the ftset opcode.

See the sections Real-time Audio and Command Line Flags for more information on using command line flags.

csdo<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>


Credits

By: Eduardo Moguillansky 2020