JACE is a Convolution Engine for JACK and ALSA, using FFT-based partitioned convolution with uniform partition sizes.
This is a prealpha release of the Jace project.
Here are some key features of "Jace":
· Any matrix of convolutions between up to 16 input and 16 outputs.
· Maximum length for each convolution is one megasample (nearly 22 seconds at 48 kHz).
· Allows the use of a period size down to 1/16 of the partition size.
· It's fast.
When used with a period size smaller than the partition size, JACE will try to spread the CPU load evenly over all process cycles that make up a partition. This works quite well if there is enough work to be distributed, and less well otherwise.
As an extreme example, if there is only one input and one output, and the convolution size is just one partition, it's clearly not possible to spread the three elementary operations over 16 cycles. But in those cases the load will be small anyway, and you can use a smaller partition size.
Code to use SSE (tested) and 3DNOW (untested !) for the MAC steps is present, but disabled by default since it seems to make little difference.
Performance on 2 GHz Pentium IV with 4 convolutions of 5.5 seconds each at Fs = 48 kHz. Load is as displayed by qjackctl. Delay is input + process + output.
period partition load delay
1024 8k 12% 340ms
1024 4K 17% 170ms
512 4K 18% 170ms
256 4K 19% 170ms
128 2k 32% 85ms
64 1k 59% 43ms