A frequency-domain convolution UGen using a fixed kernel which can be updated
by a trigger signal. The delay caused by the convolution when the kernel is a
dirac impulse is equal to frameSize - controlBlockSize
, so for a frameSize
of 2048 and a control-block size of 64, this is 1984 sample frames.
===Examples===
// three example kernels
// creates a buffer with `n` set values
def mkBuf(n: Int, amp: => Double): Buffer = {
val v = Vector.tabulate[FillValue](n) { i =>
(i.linLin(0, n, 0, 2048).toInt, amp)
}
val b = Buffer(s)
b.alloc(2048, completion = b.zeroMsg(b.setMsg(v: _*)))
b
}
val b = mkBuf(3, 1)
val c = mkBuf(50, math.random)
val d = mkBuf(20, 1)
val x = play {
val z = Impulse.ar(1)
val buf = "kernel".kr(b.id)
val tr = "trig" .tr
Convolution2.ar(z, buf, tr, 2048) * 0.5
}
// set buffer and trigger kernel actualization
x.set("kernel" -> b.id, "trig" -> 1)
x.set("kernel" -> c.id, "trig" -> 1)
x.set("kernel" -> d.id, "trig" -> 1)
x.free(); b.free(); c.free(); d.free()
- See also
- Companion
- class
Type members
Value members
Concrete methods
- Value Params
- frameSize
size of the kernel. this must be a power of two. the FFT calculated internally by the UGen has a size of twice this value. The maximum allowed
frameSize
is 16384. ''(init-time only)''- in
the realtime input to be convolved
- kernel
buffer identifier for the fixed kernel, which may be modulated in combination with the trigger. Even a trigger input of zero is used, upon UGen initialization the kernel must point to a valid buffer, otherwise the UGen aborts.
- trig
updates the kernel on a change from non-positive to positive (<= 0 to >0)