ftset
Prev | Orchestra Opcodes and Operators | Next

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

Prev | Up | Next
ftsavek | Home | ftslice