1
$\begingroup$

I'm currently thinking about the design of a low-cost digital reverb guitar pedal, using a Teensy or Arduino.

My goal is to achieve big 10-seconds long reverb.

If I implement reverb with a mix of many delay lines, this will require to store in RAM at least 10*44100*2bytes ~ 0.8 MB of audio data (44.1Khz, 16bits, mono), so it seems to be impossible to achieve with a 64KB RAM board (am I wrong?).

My question: Is there a more clever way (using FFT ? overlap-add stuff, or anything else?) to implement 10 seconds reverb with very little RAM (64KB)?

$\endgroup$
3
  • $\begingroup$ It's not quite clear to me where your delay line memory estimate comes from. If you had a single echo at 10 seconds, it would make sense, but for cascaded and fed back delay lines, the assumptions that you need 10 seconds of memory isn't obvious to me at all. Care to elaborate? $\endgroup$
    – Jazzmaniac
    Sep 13, 2015 at 16:50
  • $\begingroup$ @Jazzmaniac I thought that, in order to do a 10-sec reverb, it was needed to mix n delay/echo lines starting at various times going from a few milliseconds to nearly 10 seconds, but maybe it's wrong... Don't you think it's needed? $\endgroup$
    – Basj
    Sep 13, 2015 at 19:36
  • 1
    $\begingroup$ no, the reverberation time is also affected by the feedback gain (or the multiple feedback gains). you will need more memory to emulate a large room, though. $\endgroup$ Sep 13, 2015 at 19:40

2 Answers 2

1
$\begingroup$

Take a look at this https://ccrma.stanford.edu/~jos/pasp/Freeverb.html or https://github.com/highfidelity/gverb. Gverb is clearly the better sounding one but harder to implement.

Not sure if you can squeeze it into 64kB but it's worth a shot. The length of the delay lines is scalable to some extent. It roughly corresponds to room size with small delays being small room. 10s in a small room sounds more like bathroom and less like a concert hall or a cathedral. For really high reverb times I would recommend a floating point implementation to avoid instability and noise in the feedback loops.

$\endgroup$
2
  • $\begingroup$ Hum, I'll have a try with these 2 algorithms... Btw @Hilmar, which small board would you use (not RaspberryPi because eating too much power for a guitar pedal, not Arduino because not enough RAM and no floating point implementation) ? $\endgroup$
    – Basj
    Sep 13, 2015 at 19:34
  • $\begingroup$ @Basj, the PIC family is quite suitable for audio effects. See microchip.com/pagehandler/en-us/products/picmicrocontrollers for the available options. They are very low power and designing a board around them will be relatively easy. You can also check out the Cortex M series at arm.com/products/processors/cortex-m $\endgroup$
    – Jazzmaniac
    Sep 13, 2015 at 20:16
1
$\begingroup$

i would consider something like the Jot reverb model or the Dahl-Jot reverb model. here's an interesting recent paper.

also there is the classic Schroeder reverb model.

Google and JOS are your friends here.

$\endgroup$
2
  • $\begingroup$ Thanks for these links @robertbristowjohnson. In order to be a useful answer and for further reference, can you add details about the main question here: RAM usage in the case of long reverbs? (that was the core of the question). $\endgroup$
    – Basj
    Sep 13, 2015 at 21:08
  • $\begingroup$ so there are sorta quality decisions (that might affect, say, reverberation density in the impulse response) you have to make. like, for the basic Jot model, the number of feedback delays. usually the smallest delay is what you would relate to room size. let's say the main dimension of your room is 50 feet. that's about 50 ms and maybe 200 or 400 samples (depends on sample rate). that's the longest delay, unless you toss in some pre-delay to the whole reverberator. of the other feedback delays, they get longer in a geometric fashion with the longest maybe 3/2 the length of the shortest. $\endgroup$ Sep 14, 2015 at 0:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.