[, iirlen[, iskipinit]]]
DESCRIPTION
———–
Low latency multichannel convolution, using a function table as impulse
response source. The algorithm is to split the impulse response to
partitions of length determined by the ‘iplen’ parameter, and delay and
mix partitions so that the original, full length impulse response is
reconstructed without gaps. The output delay (latency) is ‘iplen’ samples,
and does not depend on the control rate, unlike in the case of other
convolve opcodes.
INITIALIZATION
————–
ift – source ftable number. The table is expected to contain interleaved
multichannel audio data, with the number of channels equal to the number
of output variables (a1, a2, etc.). An interleaved table can be created
from a set of mono tables with GEN52.
iplen – length of impulse response partitions, in sample frames; must be an
integer power of two. Lower settings allow for shorter output delay, but
will increase CPU usage.
iskipsamples (optional, defaults to zero) – number of sample frames to skip
at the beginning of the table.
Useful for reverb responses that have some amount of initial delay.
If this delay is not less than ‘iplen’ samples, then setting iskipsamples
to the same value as iplen will eliminate any additional latency by ftconv.
iirlen (optional) – total length of impulse response, in sample frames.
The default is to use all table data (not including the guard point).
iskipinit (optional, defaults to zero) – if set to any non-zero value, skip
initialization whenever possible without causing an error.
PERFORMANCE
———–
ain – input signal.
a1 … a8 – output signal(s).
EXAMPLE
——-
<CsoundSynthesizer>
<CsInstruments>
sr = 48000
ksmps = 32
nchnls = 2
0dbfs = 1
garvb init 0
gaW init 0
gaX init 0
gaY init 0
itmp ftgen 1, 0, 64, -2, 2, 40, -1, -1, -1, 123,
1, 13.000, 0.05, 0.85, 20000.0, 0.0, 0.50, 2,
1, 2.000, 0.05, 0.85, 20000.0, 0.0, 0.25, 2,
1, 16.000, 0.05, 0.85, 20000.0, 0.0, 0.35, 2,
1, 9.000, 0.05, 0.85, 20000.0, 0.0, 0.35, 2,
1, 12.000, 0.05, 0.85, 20000.0, 0.0, 0.35, 2,
1, 8.000, 0.05, 0.85, 20000.0, 0.0, 0.35, 2
itmp ftgen 2, 0, 262144, -2, 0
spat3dt 2, -0.2, 1, 0, 1, 1, 2, 0.005
itmp ftgen 3, 0, 262144, -52, 3, 2, 0, 4, 2, 1, 4, 2, 2, 4
instr 1
a1 vco2 1, 440, 10
kfrq port 100, 0.008, 20000
a1 butterlp a1, kfrq
a2 linseg 0, 0.003, 1, 0.01, 0.7, 0.005, 0, 1, 0
a1 = a1 * a2 * 2
denorm a1
vincr garvb, a1
aw, ax, ay, az spat3di a1, p4, p5, p6, 1, 1, 2
vincr gaW, aw
vincr gaX, ax
vincr gaY, ay
endin
instr 2
denorm garvb
; skip as many samples as possible without truncating the IR
arW, arX, arY ftconv garvb, 3, 2048, 2048, (65536 – 2048)
aW = gaW + arW
aX = gaX + arX
aY = gaY + arY
garvb = 0
gaW = 0
gaX = 0
gaY = 0
aWre, aWim hilbert aW
aXre, aXim hilbert aX
aYre, aYim hilbert aY
aWXr = 0.0928*aXre + 0.4699*aWre
aWXiYr = 0.2550*aXim – 0.1710*aWim + 0.3277*aYre
aL = aWXr + aWXiYr
aR = aWXr – aWXiYr
outs aL, aR
endin
</CsInstruments>
<CsScore>
i 1 0 0.5 0.0 2.0 -0.8
i 1 1 0.5 1.4 1.4 -0.6
i 1 2 0.5 2.0 0.0 -0.4
i 1 3 0.5 1.4 -1.4 -0.2
i 1 4 0.5 0.0 -2.0 0.0
i 1 5 0.5 -1.4 -1.4 0.2
i 1 6 0.5 -2.0 0.0 0.4
i 1 7 0.5 -1.4 1.4 0.6
i 1 8 0.5 0.0 2.0 0.8
i 2 0 10
e
</CsScore>
</CsoundSynthesizer>