Cousteau
2011-06-05
The Convolotron effect uses too much CPU due to the high number of multiplications a convolution (FIR) filter must do. Here's a little brainstorm of ideas that could be used as a replacement (with some possible names):
Reverbtron: Already implemented. It divides the FIR into segments, removing the almost-silent parts, thus having to do less operations. It's still CPU intensive.
Circulatron: A common technique for fast convolution (according to Wikipedia) is using the circular convolution theorem, so the signal and the sample are FFTed, multiplied point-wise, and IFFTed back. It can also help reducing the sample frequency so there are even less multiplications to perform.
Infinitron: An IIR is a more accurate representation of reality, in which the sound signal doesn't go through an open loop, but has some feedback instead (reverberations, echoes, etc). Although this can be implemented very accurately with a long enough FIR, an IIR filter could probably be made that had a similar FIR by using many less coefficients. Section 2 of this article shows how to approximate an FIR with an IIR by using singular value decomposition (section 3 shows an alternate method which could also be useful).
Transmogrifox
2011-06-07
At the moment I'm working on an FFT filter implementation for the Convolotron. Perhaps it can be used within Reverbtron if I'm successful at getting decent results.
The glory of Linux is you don't have to use Rakarrack as a 1-stop shop for all of your effects. Guitarix uses the zita convolver library, which is an FDL implementation of Convolution using the FFT, and is implemented better than I expect to achieve.
So the question is, why don't we leverage the zita library? Well, maybe I will. My current FFT experiment is meant to be a "cheap & dirty" FFT filter, where the magnitude of the IR is downsampled in the frequency domain to make a contour to apply to the input signal - this would be more of an adaptive filter instead of convolution with the IR. I am hoping it will make another alternative to zita that hopefully will use very low CPU since it would not do as much work in the frequency domain.
Then maybe we can implement zita libs and that solves all problems.
In the meantime, jack connect Guitarix and use their wonderful interface. Guitarix is a great complement to Rakarrack ;)