JACE is a Convolution Engine for JACK and ALSA, using FFT-based partitioned convolution with uniform partition sizes.
I wrote it mainly as a 'proof of concept' for something more complicated, to be announced at the next LAC. But it could be useful as it is, hence this release. Main features: - 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. This will not change the total delay (input + process + output) which will be twice the partition time in all cases, but at least allows you to use a smaller period size when other parts of your system require it. - It's fast (see performance examples below). 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 Grab it at <users.skynet.be/solaris/linuxaudio>. You will also need libfftw3f, libsndfile, and two shared libs available at the same place. Enjoy ! -- FA