User Defined Opcodes (UDO)

Csound allows the definition of opcodes inside the orchestra header using the opcodes opcode and endop. The defined opcode may run with a different number of control samples (ksmps) using setksmps.

To connect inputs and outputs for the UDO, use xin and xout.

An UDO looks like this:

        opcode Lowpass, a, akk

        setksmps 1              ; need sr=kr
ain, ka1, ka2   xin             ; read input parameters
aout    init 0                  ; initialize output
aout    =  ain*ka1 + aout*ka2   ; simple tone-like filter
        xout aout               ; write output

        endop

This UDO called Lowpass takes 3 inputs (the first is a-rate, and the next two are k-rate), and delivers 1 a-rate output. Notice the use of xin to receive inputs and xout to deliver outputs. Also note the use of setksmps, which is needed for the filter to work properly.

To use this UDO within an instrument, you would do something like:

afiltered Lowpass asource, kvalue1, kvalue2

See the entry for opcode for detailed information on UDO definition.

Other opcodes that are to be used in a UDO are:

You can find many ready-made UDO's (or contribute your own) at Csound's User Defined Opcode Database.