Spring reverb
Posted: Tue Mar 29, 2016 10:43 am
Hello all. I haven't been doing FV-1 stuff for a while, but my son asked me if I could do a spring reverb. I was surprised at how little info there was on the forum. Learning more about it, I see why now. It is totally unlike other reverb algorithms, and it is hard to do. Being a retired electrical engineer, I decided to wade through what technical papers I could find on the subject, and then see what I could do on the FV-1. Here is a short tutorial if anyone is still interested:
Spring reverb has unique sound due to the way sound travels down the spring itself. High frequencies travel slower than low frequencies, a characteristic called "dispersion". The classic "boing" of a tapped spring results from the impulse being dispersed into a "chirp".
Simulating the dispersion of the spring requires a "spectral delay filter". It can be implemented with a very large number of unit delay allpass filters. The allpass provides a frequency-dependent phase shift. Put a lot of them in series and the phase shift adds up to a delay.
We need many milliseconds of delay of the high frequencies for the effect to be noticeable - 8ms at 32KHz sample rate is 256 allpasses! All is not lost, though. If we bandwidth-limit the signal, we can "stretch" the allpasses by going from unit delays to longer delays. Not hundreds of samples like conventional "reflection emulating" reverbs - more like 3 or 4 samples. At 4, now we are talking 64 allpasses. The FV-1 does one allpass in two instructions, so this would totally fill the program memory. We need to compromise further to get anything else done, but we are at least in the ballpark.
Add a couple of long simple delays in front of the allpass string, some filtering, and feedback around the whole thing. This is as close as we are going to get to a spring reverb within the confines of the FV-1.
I have coded it up and it indeed sounds "springy". I don't have a real spring reverb to compare it too, though. This has just been an intellectual exercise for me - no intent to develop a product.
I hesitate to share code because I don't want to field questions about what each line of code does or how to change it. I think that the information I have provided here should be enough for any FV-1 jockeys out there to get started.
Good luck,
Don
Spring reverb has unique sound due to the way sound travels down the spring itself. High frequencies travel slower than low frequencies, a characteristic called "dispersion". The classic "boing" of a tapped spring results from the impulse being dispersed into a "chirp".
Simulating the dispersion of the spring requires a "spectral delay filter". It can be implemented with a very large number of unit delay allpass filters. The allpass provides a frequency-dependent phase shift. Put a lot of them in series and the phase shift adds up to a delay.
We need many milliseconds of delay of the high frequencies for the effect to be noticeable - 8ms at 32KHz sample rate is 256 allpasses! All is not lost, though. If we bandwidth-limit the signal, we can "stretch" the allpasses by going from unit delays to longer delays. Not hundreds of samples like conventional "reflection emulating" reverbs - more like 3 or 4 samples. At 4, now we are talking 64 allpasses. The FV-1 does one allpass in two instructions, so this would totally fill the program memory. We need to compromise further to get anything else done, but we are at least in the ballpark.
Add a couple of long simple delays in front of the allpass string, some filtering, and feedback around the whole thing. This is as close as we are going to get to a spring reverb within the confines of the FV-1.
I have coded it up and it indeed sounds "springy". I don't have a real spring reverb to compare it too, though. This has just been an intellectual exercise for me - no intent to develop a product.
I hesitate to share code because I don't want to field questions about what each line of code does or how to change it. I think that the information I have provided here should be enough for any FV-1 jockeys out there to get started.
Good luck,
Don