User-Defined Opcode Database

ensembleChorus

A stereo chorus opcode with multiple voices.

Download UDO File

Description

A stereo chorus opcode with multiple voices.
User can control how many voices.

Syntax

al, ar ensembleChorus ain, kdelay, kdpth, kminrate, kmaxrate, inumvoice, iwave

Initialization

inumvoice -- number of voices
iwave -- function table for the lfo wave (sine, triangle, etc).

Performance

kdelay -- delay time in seconds
kdepth -- chorus depth in seconds
kminrate/kmaxrate -- min and max lfo rates (cps)

Code

	opcode ensembleChorus, aa, akkkkiip
ain, kdelay, kdpth, kmin, kmax, inumvoice, iwave, icount xin
incr = 1/(inumvoice)

if (icount == inumvoice) goto out
ainl, ainr ensembleChorus ain, kdelay, kdpth, kmin, kmax, inumvoice, iwave, icount + 1

out:

max:
imax = i(kmax)
if (kmax != imax) then 
reinit max
endif

iratemax unirand imax
rireturn
alfo oscil kdpth, iratemax + kmin, iwave
adel vdelay3 ain/(inumvoice * .5), (kdelay + alfo) * 1000, 1000
al = ainl + adel * incr * icount
ar = ainr + adel * (1 - incr * icount)
xout al, ar
	endop

Examples

/* .orc */
nchnls = 2

	opcode ensembleChorus, aa, akkkkiip
;kdpth 0 - kdelay, kmin/max = cps
ain, kdelay, kdpth, kmin, kmax, inumvoice, iwave, icount xin
incr = 1/(inumvoice)

if (icount == inumvoice) goto out
ainl, ainr ensembleChorus ain, kdelay, kdpth, kmin, kmax, inumvoice, iwave, icount + 1

out:

max:
imax = i(kmax)
if (kmax != imax) then 
reinit max
endif

iratemax unirand imax
rireturn
alfo oscil kdpth, iratemax + kmin, iwave
adel vdelay3 ain/(inumvoice * .5), (kdelay + alfo) * 1000, 1000
al = ainl + adel * incr * icount
ar = ainr + adel * (1 - incr * icount)
xout al, ar
	endop

instr 1
ain  buzz 20000, 120, 100, 1
al, ar ensembleChorus ain, .01, .005, .75, 1, 12, 10
outs al, ar
endin

/* .sco */
f1 0 65536 10 1
f10 0 65536 10 1 0 0 0 0 0 0 0 0 .05

i1 0 10

Credits

bhob rainey


Previous Home Next
boomerangPointer   Fofilter