[PD] Making a Realtime Convolution External

Seth Nickell seth at meatscience.net
Tue Apr 5 02:54:08 CEST 2011


I'm planning to release our realtime convolution engine (extracted
from http://meatscience.net/pages/convolution-reverb) as a GPLed Pd
external.

It currently accepts 4-channel ('true stereo'), two channel or mono
impulse responses, with stereo or mono output. Performance is
excellent if you have SSE3 and has a fallback in case you don't, and
it aims for accuracy (basically that means multi-stage scaling to keep
floats within healthy sizes).

1) I'd love to swipe the convolve~ external name, currently installed
by mjlib as part of pd-extended. convolve~ from mjlib appears to be a
copy of pin~ ? so I think it could be taken? Maybe I mis-read the
code. I've cc'ed mark who can probably clarify.

2) Anyone have requests for features/api? Its currently simplistic:
   - takes a "read FILENAME" message, loads the file, does a test
convolution against pink noise to normalize the gain to something sane
   - caches the last N impulse responses, as the test convolution
takes a little time
   - allows setting the cache size with a "cachesize N" message
   - disable normalization with "normalize 0" or "normalize 1"

  Features I'm considering (let me know if they sound useful):
    - load from an array instead of from disk (no gain normalization?)
    - It wouldn't be hard to enable MxN convolution if that floats
somebody's boat.

3) I can compile/test on Mac & Linux, anyone up for helping me with Windows?

4) Would this be of interest for Pd-extended?

5) I'd love to build a granular convolution engine.... takes two
real-time signals, and extracts grains from one to convolve against
the other. Anyone have ideas about this?

thanks all,

-Seth



More information about the Pd-list mailing list