Convolution2L

object Convolution2L extends ProductReader[Convolution2L]

A frequency-domain convolution UGen using two linearly interpolated fixed kernels. When a trigger is received, a linear fade will be performed from the previously used kernel (internally stored by the UGen) towards the snapshot of the current kernel content upon receiving the trigger.

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.

'''Note''': If a trigger is received before the previous fade is complete, the interpolation is broken and the kernel instead jumps straight to one of the two buffers.

===Examples===

// three example kernels
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(16)
 val buf   = "kernel".kr(b.id)
 val tr    = "trig"  .tr
 val dur   = 4.0          // fade-time in seconds
 val n     = 2048
 val block = SampleRate.ir / n
 val p     = dur * block  // ... in periods
 Convolution2L.ar(z, buf, tr, 2048, p) * 0.5
}

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
trait Product
trait Mirror
trait ProductReader[Convolution2L]
class Object
trait Matchable
class Any

Type members

Inherited types

type MirroredElemLabels <: Tuple

The names of the product elements

The names of the product elements

Inherited from
Mirror
type MirroredLabel <: String

The name of the type

The name of the type

Inherited from
Mirror

Value members

Concrete methods

def ar(in: GE, kernel: GE, trig: GE, frameSize: GE, fadePeriods: GE): Convolution2L
Value Params
fadePeriods

fade duration expressed as number of convolved blocks. If the desired duration in seconds is dur , then the number of periods can be calculated as fadePeriods = dur * SampleRate.ir / frameSize . ''(init-time only)''

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 if the trigger input is initially zero, upon UGen initialization the kernel must point to a valid buffer, otherwise the UGen aborts.

trig

begins a fade to update the kernel on a change from non-positive to positive (<= 0 to >0).

def read(in: RefMapIn, key: String, arity: Int): Convolution2L