vdelayxwq — Variable delay opcodes with high quality interpolation.


Variable delay opcodes with high quality interpolation.


aout1, aout2, aout3, aout4 vdelayxwq ain1, ain2, ain3, ain4, adl, \
      imd, iws [, ist]


imd -- max. delay time (seconds)

iws -- interpolation window size (see below)

ist (optional) -- skip initialization if not zero


ain1, ain2, ain3, ain4 -- input audio signals

aout1, aout2, aout3, aout4 -- output audio signals

adl -- delay time in seconds

These opcodes use high quality (and slow) interpolation, that is much more accurate than the currently available linear and cubic interpolation. The iws parameter sets the number of input samples used for calculating one output sample (allowed values are any integer multiply of 4 in the range 4 - 1024); higher values mean better quality and slower speed.

The vdelayxw opcodes change the position of the write tap in the delay line (unlike all other delay ugens that move the read tap), and are most useful for implementing Doppler effects where the position of the listener is fixed, and the sound source is moving.

The multichannel opcodes (eg. vdelayxq) allow delaying 2 or 4 variables at once (stereo or quad signals); this is much more efficient than using separate opcodes for each channel.

[Note] Notes

  • Delay time is measured in seconds (unlike in vdelay and vdelay3), and must be a-rate.

  • The minimum allowed delay is iws/2 samples.

  • Using the same variables as input and output is allowed in these opcodes.

  • In vdelayxw*, changing the delay time has some effects on output volume:

    a = 1 / (1 + dt)

    where a is the output gain, and dt is the change of delay time per seconds.

  • These opcodes are best used in the double-precision version of Csound.


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

Example 1199. Example of the vdelayxwq opcode.

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

; 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 vdelayxwq.wav -W ;;; for file output any platform

sr = 44100
ksmps = 32
nchnls = 4
0dbfs  = 1

instr 1 

ims  =	.5				;maximum delay time in seconds
iws  =	1024				;best quality
adl  =	.5				;delay time
aout1  diskin2 "drumsMlp.wav", 1, 0, 1	;loop drumsMlp.wav
aout2  diskin2 "fox.wav", 1, 0, 1	;loop fox.wav
aout3  diskin2 "Church.wav", 1, 0, 1	;loop Church.wav
aout4  diskin2 "flute.aiff", 1, 0, 1	;loop flute.aiff
a2   poscil3 .2, .1, 1			;make an LFO, 1 cycle per 2 seconds
adl  = a2 + ims/2      			;offset the LFO so that it is positive
aout1, aout2, aout3, aout4 vdelayxwq aout1, aout2, aout3, aout4, adl, ims, iws	;use the LFO to control delay time
     outq aout1, aout2, aout3, aout4

f1 0 8192 10 1

i 1 0 10


See also