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