I used to have a set of abstractions that did this. I threw it
together on a whim, it wasn't all that efficient, and I haven't tested
it in a couple of years... it would need a total revamp to be usable
even for teaching because the constituent abstractions are not
documented and not altogether straightforward.
Anyway, I think you can copy the contents of an impulse-response array
to several smaller arrays (the partitioning) using dynamic patching,
then do fft-convolution with the incoming signal and the contents of
the array (using [tabreceive~]), and then delay each separate signal
by the appropriate amount (taking block delay into account) so that
the aggregate produces the original impulse response convolved with
the input. I think you might be able to get a bonus in efficiency if
you do the partitioning into the following array sizes:
64 64 128 128 256 256 512 512 etc.
Then you can avoid having more than a 64-sample-block delay overall,
because the block delay associated with each set of larger arrays will
be just enough to collect enough samples to compute the fft, do the
mulitplication and ifft, and output the result. You might even be
able to build in a buffer by doing:
64 32 32 64 64 128 128 256 256 512 512 etc.
This should give extra time to compute the fft->mult->ifft
I think I had built in an optional maximum fft size, so that at some
point it would just continue to partition into, say, 8192-sample
chunks.
I had been thinking about doing the first block as a direct
convolution for no overall delay, but I couldn't decide whether it
would be worth it from the standpoint of efficiency... anyway, I
couldn't get it to work without dropouts for a response of more than
about 2 seconds long.
Matt
>
> is it possible to do something vaguely similiar in vanilla pd?
>