(disclaimer : I don't know much about signal processing, apologies in advance if I'm not using the proper terms or not making sense, feel free to contact me and tell me why I'm wrong).

I've been experimenting with generating one-dimentional kernels and using them as coefficients for causal+anti-causal audio FIR filter.

So here is a test sample : test.wav

And here is what it sounds like being played through various filters :
Each picture represents the shape of the kernel, "length" is the number of samples on a 44100Hz basis, "passes" is the number of times the filter is applied.

result01.wav
result02.wav
result03.wav
result04.wav
result05.wav
result06.wav
result07.wav
result08.wav
result09.wav
result10.wav
result11.wav
result12.wav
result13.wav
result14.wav
result15.wav
result16.wav
result17.wav
result18.wav
result19.wav

And here is the piece of java code used for these : audioKernel.zip

Now here is another tool : kernelConvolver.zip

This one can take two samples, and use them as filters on each other. Settings can be changed in the "params.txt" file.

First test sample : Second test sample : These two convolved with each other :
testA.wav testB.wav testA+B.wav

If the kernel size and block sizes are all set to 1, then the result is simply a ringmod operation.
But another typical use would be to set a longer block size to one of the samples and let the other be 1. Then the sound will be periodically "sampled" (at the rate of the block size in samples) and convolved using a Nuttall window with the specified kernel length.

These two tools only work well with some specific wav files for some reason (it works when I convert them to 44.1Khz/16bits with Foobar but not with some other softwares, it might be an endianness issue but I haven't investigated it further).