# Any free, real-time convolution reverb libraries out there?

**URL:** https://forum.juce.com/t/any-free-real-time-convolution-reverb-libraries-out-there/18483
**Category:** Audio Plugins
**Created:** [July 20, 2016, 8:37am UTC](https://forum.juce.com/t/any-free-real-time-convolution-reverb-libraries-out-there/18483 "2016-07-20T08:37:37Z")
**Posts on this page:** 14
**Page:** 1

<div class="post-metadata">

### Author: ![tsenkov](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/tsenkov/32/3150_2.png) [@tsenkov](https://forum.juce.com/u/tsenkov)
#### Post date: [July 20, 2016, 8:37am UTC](https://forum.juce.com/t/any-free-real-time-convolution-reverb-libraries-out-there/18483/1 "2016-07-20T08:37:37Z")

</div>

Hello JUCErs,

What do you use for convolution reverb in your plugins? In-house built reverb(s) or something open-source?  
Do you know of any free, real-time convolution reverb libraries out there?

Any help is much appreciated!

Cheers!

---

<div class="post-metadata">

### Author: ![lalala](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/lalala/32/8577_2.png) [@lalala](https://forum.juce.com/u/lalala)
#### Post date: [July 20, 2016, 8:55am UTC](https://forum.juce.com/t/any-free-real-time-convolution-reverb-libraries-out-there/18483/2 "2016-07-20T08:55:19Z")

</div>

wdl from cockos has a convolution engine that works fine :  
[http://www.cockos.com/wdl/](http://www.cockos.com/wdl/)

Juce may have one soon in the upcoming DSP module (?)

---

<div class="post-metadata">

### Author: ![tsenkov](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/tsenkov/32/3150_2.png) [@tsenkov](https://forum.juce.com/u/tsenkov)
#### Post date: [July 20, 2016, 9:05am UTC](https://forum.juce.com/t/any-free-real-time-convolution-reverb-libraries-out-there/18483/3 "2016-07-20T09:05:05Z")

</div>

Thanks for the fast response!

I’ve read that people talk about replacing/replacing-on-intel-platforms the FFT algorithms in the Convolution engine of WDL with the Intel IPP. Do you think I should do that as well? (my case is, I have a sampled piano and just want to add a nice effects section for it, so it definitely shouldn’t add any perceptible delay)

Also, is there any public source of this upcoming DSP module for JUCE? I’ve looked in the repo, but there doesn’t seem to be such a new module added to the development branch?

---

<div class="post-metadata">

### Author: ![lalala](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/lalala/32/8577_2.png) [@lalala](https://forum.juce.com/u/lalala)
#### Post date: [July 20, 2016, 9:12am UTC](https://forum.juce.com/t/any-free-real-time-convolution-reverb-libraries-out-there/18483/4 "2016-07-20T09:12:59Z")

</div>

Changing the fft algo is just about performance, not about “perceptible delay”. You can already do the convolution without added delay with WDL as it is. But changing the fft within the engine to the ipp one will improve the performance yes.

There’s no public source of the upcoming dsp module afaik.

---

<div class="post-metadata">

### Author: ![chrisboy2000](https://avatars.discourse-cdn.com/v4/letter/c/a3d4f5/32.png) [@chrisboy2000](https://forum.juce.com/u/chrisboy2000)
#### Post date: [July 20, 2016, 2:41pm UTC](https://forum.juce.com/t/any-free-real-time-convolution-reverb-libraries-out-there/18483/5 "2016-07-20T14:41:50Z")

</div>

The wdl convo engine can’t cope with IRs longer than 0,5 seconds unless you replace the fft with IPP.

AudioTK has also a convolution class but I didn’t check it.

---

<div class="post-metadata">

### Author: ![lalala](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/lalala/32/8577_2.png) [@lalala](https://forum.juce.com/u/lalala)
#### Post date: [July 20, 2016, 2:58pm UTC](https://forum.juce.com/t/any-free-real-time-convolution-reverb-libraries-out-there/18483/6 "2016-07-20T14:58:39Z")

</div>

really? I think already used it with some 10sec IR @44k and did not notice any particular issue.  
I’m pretty sure that it’s the engine they use in the Reaverb vst plugin that comes with Reaper, so you can test it there

---

<div class="post-metadata">

### Author: ![tsenkov](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/tsenkov/32/3150_2.png) [@tsenkov](https://forum.juce.com/u/tsenkov)
#### Post date: [July 20, 2016, 3:37pm UTC](https://forum.juce.com/t/any-free-real-time-convolution-reverb-libraries-out-there/18483/7 "2016-07-20T15:37:22Z")

</div>

@olilarkin it would be awesome if you comment on the Convolution engine in WDL.  
How about the version in your fork, WDL-OL - is it any different?

---

<div class="post-metadata">

### Author: ![chrisboy2000](https://avatars.discourse-cdn.com/v4/letter/c/a3d4f5/32.png) [@chrisboy2000](https://forum.juce.com/u/chrisboy2000)
#### Post date: [July 20, 2016, 4:24pm UTC](https://forum.juce.com/t/any-free-real-time-convolution-reverb-libraries-out-there/18483/8 "2016-07-20T16:24:41Z")

</div>

I tested it on a fairly moderate system (2012 Macbook pro). But curiously the Reaverb plugin behaves similar (I do get glitches when loading longer impulses) so maybe my system is a bit weird - however every other convolution engine (reverberate, max msp convolution, reverence, KONTAKT) does not have these problems.

I am using Olis fork btw, but it is not different from the tale version (except for some examples IIRC)

---

<div class="post-metadata">

### Author: ![olilarkin](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/olilarkin/32/7142_2.png) [@olilarkin](https://forum.juce.com/u/olilarkin)
#### Post date: [July 21, 2016, 9:34am UTC](https://forum.juce.com/t/any-free-real-time-convolution-reverb-libraries-out-there/18483/9 "2016-07-21T09:34:34Z")

</div>

Tales version of WDL has and enhanced convoengine with multithreading support. I’ve used the convoengine very successfully

Here is some source code from a juce project I am working on that uses it.

> **[Dropbox - Link not found](https://www.dropbox.com/s/ubkaohc8wnnyi21/convoengine_juce.zip?dl=0)**
>
> Dropbox is a free service that lets you bring your photos, docs, and videos anywhere and share them easily. Never email yourself a file again!

EDIT-\>updated source code because there was a bug

---

<div class="post-metadata">

### Author: ![tsenkov](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/tsenkov/32/3150_2.png) [@tsenkov](https://forum.juce.com/u/tsenkov)
#### Post date: [July 21, 2016, 9:38am UTC](https://forum.juce.com/t/any-free-real-time-convolution-reverb-libraries-out-there/18483/10 "2016-07-21T09:38:50Z")

</div>

Thanks so much for joining in on the discussion, Oli!

When you say you’ve used the convoengine very successfully, do you mean Tale’s version?

---

<div class="post-metadata">

### Author: ![olilarkin](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/olilarkin/32/7142_2.png) [@olilarkin](https://forum.juce.com/u/olilarkin)
#### Post date: [July 21, 2016, 9:49am UTC](https://forum.juce.com/t/any-free-real-time-convolution-reverb-libraries-out-there/18483/11 "2016-07-21T09:49:51Z")

</div>

@chrisboy2000 I’ve had success with the WDL\_ConvolutionEngine\_Div variant.

---

<div class="post-metadata">

### Author: ![tsenkov](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/tsenkov/32/3150_2.png) [@tsenkov](https://forum.juce.com/u/tsenkov)
#### Post date: [July 26, 2016, 8:16am UTC](https://forum.juce.com/t/any-free-real-time-convolution-reverb-libraries-out-there/18483/12 "2016-07-26T08:16:00Z")

</div>

I am testing with your code and it does glitch a lot (the convo engine that is) with a 3sec impulse response.

BTW, I had to change this method in order to run it:

```
void ConvolutionReverb::prepareToPlay (
    int estimatedSamplesPerBlock,
    double sampleRate
)
{
    // Detect a change in sample rate.
    if (sampleRate != mSampleRate)
    {
        mSampleRate = sampleRate;

        if (mIRAudioSampleBuffer != nullptr)
        {
// <change>
            // ... if calls are already scheduled
            mLoadThreadToAudioThreadCallQueue.synchronize ();

// </change>
            updateConvoEngineIR (
                mIRAudioSampleBuffer->getNumChannels (),
                mIRSampleRate
            );
        }

        mDryLevelSmoother.setTimeMS (cSmoothTime, mSampleRate);
        mWetLevelSmoother.setTimeMS (cSmoothTime, mSampleRate);
    }
}

```

I had to add the sync call because on first run, the run method would be finished at prepareToPlay time, but no processBlock was called to update the IR sample rate and the method doesn’t schedule the new update - it directly executes it. Probably it should just schedule it too?

I guess I must replace the FFT with the one from IPP.

---

<div class="post-metadata">

### Author: ![chrisboy2000](https://avatars.discourse-cdn.com/v4/letter/c/a3d4f5/32.png) [@chrisboy2000](https://forum.juce.com/u/chrisboy2000)
#### Post date: [July 26, 2016, 4:39pm UTC](https://forum.juce.com/t/any-free-real-time-convolution-reverb-libraries-out-there/18483/13 "2016-07-26T16:39:51Z")

</div>

I have a wdl version using IPP for the convolution in my repo which you could use so you don’t need to write the IPP glue code yourself…

---

<div class="post-metadata">

### Author: ![tsenkov](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/tsenkov/32/3150_2.png) [@tsenkov](https://forum.juce.com/u/tsenkov)
#### Post date: [July 28, 2016, 7:30am UTC](https://forum.juce.com/t/any-free-real-time-convolution-reverb-libraries-out-there/18483/14 "2016-07-28T07:30:27Z")

</div>

I’ve tested pretty much everything mentioned here in this thread - both default and \_Div version of the convoengines in WDL, WDL-OL, WDL-TALE and WDL-OL with FFT replaced with intel IPP’s FFT.

Tale’s version of WDL’s convoengine (the WDL\_ConvolutionEngine\_Thread) works best in my tests.  
Second is the WDL-OL’s convoengine with intel’s IPP FFT.

Something I haven’t tested and expect to perform even better - Tale’s WDL\_ConvolutionEngine\_Thread with intel IPP’s FFT.
