 Extension
ExtensionConvolve an Array of channels to an Array of channels.
| in | The input signal, an array. | 
| kernel | The convolution kernel. | 
| mul | Output will be multiplied by this value. | 
| add | This value will be added to the output. | 
An array of channels.
// hand code a mono signal to a decorrelated soundfield in B-format
// NOTE: the demonstrated kernel is not ideal for this task
// define encoding kernel
(
var kernelSize;
var scale;
kernelSize = 256;
scale = 24.neg.dbamp;
~kernel = [[
    Buffer.loadCollection(s, FloatArray.fill(kernelSize, {(3/2).sqrt * scale.rand2})),
    Buffer.loadCollection(s, FloatArray.fill(kernelSize, {scale.rand2})),
    Buffer.loadCollection(s, FloatArray.fill(kernelSize, {scale.rand2})),
    Buffer.loadCollection(s, FloatArray.fill(kernelSize, {scale.rand2}))
]]
)
// convolve
(
{ 
    var sig;
    // pink noise
    sig = PinkNoise.ar;
    // encode
    AtkKernelConv.ar(sig, ~kernel);
}.scope
)
// free kernel when finished
~kernel.at(0).do({arg kern; kern.free})