chnget — Reads data from the software bus.


Reads data from a channel of the inward named software bus. Implies declaring the channel with imode=1 (see also chn_k, chn_a, and chn_S).


ival chnget Sname
kval chnget Sname
aval chnget Sname
Sval chnget Sname
Sval chngetks Sname
ival[] chngeti Sname[]
kval[] chngetk Sname[]
aval[] chngeta Sname[]
Sval[] chngets Sname[]


Sname -- a string that identifies a channel of the named software bus to read.

Sname[] -- an array of named software channels to query.

ival -- the control value read at i-time.

Sval -- the string value read at i-time.

ival[] -- an array of control values read at i-time.

Sval{} -- an array of strings read at i-time.


kval -- the control value read at performance time.

kval[] -- an array of control values read at performance time.

aval -- the audio signal read at performance time.

aval[] -- the array of audio vectors read at performance time.

Sval -- the string value read at k-rate. The chnget opcode works both at i-time and perf-time, whereas chngetks works only at perf-time. String variables are only updated if the channel has changed.

[Note] Note

Although it is possible to loop through channel names from an array with chnget and chnset, using the array based variants is more efficient.


The example shows the software bus being used as an asynchronous control signal to select a filter cutoff. It assumes that an external program that has access to the API is feeding the values.

        sr = 44100
        kr = 100
        ksmps = 1

        instr   1
           kc   chnget    "cutoff"
           a1   oscil     p4, p5, 100
           a2   lowpass2  a1, kc, 200
                out       a2

Here is another example of the chnget opcode. It uses the file chnget.csd.

Example 138. Example of the chnget opcode.

; 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 chnget.wav -W ;;; for file output any platform
;Example by Joachim Heintz
sr = 44100
ksmps = 32
nchnls = 2
0dbfs = 1

  instr 1; send i-values
          chnset    1, "sio"
          chnset    -1, "non"

  instr 2; send k-values
kfreq     randomi   100, 300, 1
          chnset    kfreq, "cntrfreq"
kbw       =         kfreq/10
          chnset    kbw, "bandw"

  instr 3; send a-values
anois     rand      .1
          chnset    anois, "noise"
idur      random    .3, 1.5
          timout    0, idur, do
          reinit    loop
ifreq     random    400, 1200
iamp      random    .1, .3
asig      oscils    iamp, ifreq, 0
aenv      transeg   1, idur, -10, 0
asine     =         asig * aenv
          chnset    asine, "sine"

  instr 11; receive some chn values and send again
ival1     chnget    "sio"
ival2     chnget    "non"
          print     ival1, ival2
kcntfreq  chnget    "cntrfreq"
kbandw    chnget    "bandw"
anoise    chnget    "noise"
afilt     reson     anoise, kcntfreq, kbandw
afilt     balance   afilt, anoise
          chnset    afilt, "filtered"

  instr 12; mix the two audio signals
amix1     chnget     "sine"
amix2     chnget     "filtered"
          chnmix     amix1, "mix"
          chnmix     amix2, "mix"

  instr 20; receive and reverb
amix      chnget     "mix"
aL, aR    freeverb   amix, amix, .8, .5
          outs       aL, aR

  instr 100; clear
          chnclear   "mix"

i 1 0 20
i 2 0 20
i 3 0 20
i 11 0 20
i 12 0 20
i 20 0 20
i 100 0 20

See also

Software Bus


Author: Istvan Varga
Array based channel opcodes added in version 6.14 - Rory Walsh