MVerb - A Free Open Source Reverb
-
- KVRian
- 1439 posts since 25 Nov, 2008 from Seattle, WA
-
- KVRian
- Topic Starter
- 995 posts since 25 Apr, 2005
Awesome work, thank you lubomir.ivanovlubomir.ivanov wrote:here is a debug, vst build of mverb for 64bit windows:
http://dl.dropbox.com/u/1627980/axon/mv ... ug-x64.zip
(1.6mb zip)
if the plugin crashes on your machine please report:
- cpu model
- windows version
- crash log
- does it crash only in specific hosts
- etc
this will be very helpful to us,
thanks.
ps: note that this debug build is around 28 times larger and 2-3 times slower.
-
- KVRian
- 1439 posts since 25 Nov, 2008 from Seattle, WA
I'm sorry to say that the debug x64 version of mverb crashes Cubase 5.5.0 x64 
Repro steps:
1. Open empty project (44.1kHz/32bit)
2. Insert audio file. Loop it. Press Play.
3. Hit the "e" button on the track to display the effects rack.
4. On the first insert choose mverb.
Result: Cubase Crashes
Here's the mverb log:
[mverb.cpp:317] malloc(new), 0x1fde00, 40, 40
[axBase.h:118] malloc(new), 0x1fdd50, 24, 64
[axBase.h:119] malloc(new), 0x1fdd50, 368, 432
[axBase.h:120] malloc(new), 0x1fdd50, 8, 440
[axBase.h:121] malloc(new), 0x1fdd50, 232, 672
[axFormatVst.h:1679] axFormatVst.constructor
[axBase.h:139] malloc(new), 0x1fdd80, 5801808, 5802480
[axArray.h:50] malloc, 0x1fd9e0, 128, 5802608
[axArray.h:50] malloc, 0x1fd9e0, 128, 5802736
[axFormatVst.h:107] audioMaster: 91051840
[axFormatVst.h:147] malloc(new), 0x1fd960, 64, 5802800
[axFormatVst.h:147] malloc(new), 0x1fd960, 64, 5802864
[axFormatVst.h:147] malloc(new), 0x1fd960, 64, 5802928
[axFormatVst.h:147] malloc(new), 0x1fd960, 64, 5802992
[axFormatVst.h:147] malloc(new), 0x1fd960, 64, 5803056
[axFormatVst.h:147] malloc(new), 0x1fd960, 64, 5803120
[axFormatVst.h:147] malloc(new), 0x1fd960, 64, 5803184
[axFormatVst.h:147] malloc(new), 0x1fd960, 64, 5803248
[axFormatVst.h:147] malloc(new), 0x1fd960, 64, 5803312
[mverb.cpp:191] malloc(new), 0x1fdb50, 64, 5803376
[mverb.cpp:192] malloc(new), 0x1fdb50, 64, 5803440
[mverb.cpp:193] malloc(new), 0x1fdb50, 64, 5803504
[mverb.cpp:194] malloc(new), 0x1fdb50, 64, 5803568
[mverb.cpp:195] malloc(new), 0x1fdb50, 64, 5803632
[mverb.cpp:196] malloc(new), 0x1fdb50, 64, 5803696
[mverb.cpp:197] malloc(new), 0x1fdb50, 64, 5803760
[mverb.cpp:198] malloc(new), 0x1fdb50, 64, 5803824
[axArray.h:169] realloc, 0x1fdbd0, 0x1fdb90, 256, 5803952
[mverb.cpp:199] malloc(new), 0x1fdb50, 64, 5804016
[mverb.cpp:201] malloc(new), 0x1fdb50, 56, 5804072
[axProgram.h:34] malloc, 0x1fdbc0, 36, 5804108
[mverb.cpp:202] malloc(new), 0x1fdb50, 56, 5804164
[axProgram.h:34] malloc, 0x1fdbc0, 36, 5804200
[mverb.cpp:203] malloc(new), 0x1fdb50, 56, 5804256
[axProgram.h:34] malloc, 0x1fdbc0, 36, 5804292
[mverb.cpp:204] malloc(new), 0x1fdb50, 56, 5804348
[axProgram.h:34] malloc, 0x1fdbc0, 36, 5804384
[mverb.cpp:205] malloc(new), 0x1fdb50, 56, 5804440
[axProgram.h:34] malloc, 0x1fdbc0, 36, 5804476
[axFormatVst.h:581] effCanDo: 'bypass' (return: 0)
[axFormatVst.h:581] effCanDo: 'receiveVstMidiEvent' (return: 1)
[axFormatVst.h:581] effCanDo: 'sendVstMidiEvent' (return: 1)
[axFormatVst.h:581] effCanDo: 'midiProgramNames' (return: 0)
Here is the windows crash log:
Faulting application name: Cubase5.exe, version: 5.5.0.602, time stamp: 0x4c061a50
Faulting module name: mverb-vst-debug-x64.dll, version: 0.0.0.0, time stamp: 0x4c4f455f
Exception code: 0xc0000005
Fault offset: 0x00000000000152e0
Faulting process id: 0xa0c
Faulting application start time: 0x01cb319230bdbead
Faulting application path: C:\Program Files\Steinberg\Cubase 5\Cubase5.exe
Faulting module path: C:\Program Files\Steinberg\Cubase 5\VSTPlugIns\mverb-vst-debug-x64.dll
Report Id: ae08ec8c-9d85-11df-af01-0023543b64a8
Hope this helps.
Repro steps:
1. Open empty project (44.1kHz/32bit)
2. Insert audio file. Loop it. Press Play.
3. Hit the "e" button on the track to display the effects rack.
4. On the first insert choose mverb.
Result: Cubase Crashes
Here's the mverb log:
[mverb.cpp:317] malloc(new), 0x1fde00, 40, 40
[axBase.h:118] malloc(new), 0x1fdd50, 24, 64
[axBase.h:119] malloc(new), 0x1fdd50, 368, 432
[axBase.h:120] malloc(new), 0x1fdd50, 8, 440
[axBase.h:121] malloc(new), 0x1fdd50, 232, 672
[axFormatVst.h:1679] axFormatVst.constructor
[axBase.h:139] malloc(new), 0x1fdd80, 5801808, 5802480
[axArray.h:50] malloc, 0x1fd9e0, 128, 5802608
[axArray.h:50] malloc, 0x1fd9e0, 128, 5802736
[axFormatVst.h:107] audioMaster: 91051840
[axFormatVst.h:147] malloc(new), 0x1fd960, 64, 5802800
[axFormatVst.h:147] malloc(new), 0x1fd960, 64, 5802864
[axFormatVst.h:147] malloc(new), 0x1fd960, 64, 5802928
[axFormatVst.h:147] malloc(new), 0x1fd960, 64, 5802992
[axFormatVst.h:147] malloc(new), 0x1fd960, 64, 5803056
[axFormatVst.h:147] malloc(new), 0x1fd960, 64, 5803120
[axFormatVst.h:147] malloc(new), 0x1fd960, 64, 5803184
[axFormatVst.h:147] malloc(new), 0x1fd960, 64, 5803248
[axFormatVst.h:147] malloc(new), 0x1fd960, 64, 5803312
[mverb.cpp:191] malloc(new), 0x1fdb50, 64, 5803376
[mverb.cpp:192] malloc(new), 0x1fdb50, 64, 5803440
[mverb.cpp:193] malloc(new), 0x1fdb50, 64, 5803504
[mverb.cpp:194] malloc(new), 0x1fdb50, 64, 5803568
[mverb.cpp:195] malloc(new), 0x1fdb50, 64, 5803632
[mverb.cpp:196] malloc(new), 0x1fdb50, 64, 5803696
[mverb.cpp:197] malloc(new), 0x1fdb50, 64, 5803760
[mverb.cpp:198] malloc(new), 0x1fdb50, 64, 5803824
[axArray.h:169] realloc, 0x1fdbd0, 0x1fdb90, 256, 5803952
[mverb.cpp:199] malloc(new), 0x1fdb50, 64, 5804016
[mverb.cpp:201] malloc(new), 0x1fdb50, 56, 5804072
[axProgram.h:34] malloc, 0x1fdbc0, 36, 5804108
[mverb.cpp:202] malloc(new), 0x1fdb50, 56, 5804164
[axProgram.h:34] malloc, 0x1fdbc0, 36, 5804200
[mverb.cpp:203] malloc(new), 0x1fdb50, 56, 5804256
[axProgram.h:34] malloc, 0x1fdbc0, 36, 5804292
[mverb.cpp:204] malloc(new), 0x1fdb50, 56, 5804348
[axProgram.h:34] malloc, 0x1fdbc0, 36, 5804384
[mverb.cpp:205] malloc(new), 0x1fdb50, 56, 5804440
[axProgram.h:34] malloc, 0x1fdbc0, 36, 5804476
[axFormatVst.h:581] effCanDo: 'bypass' (return: 0)
[axFormatVst.h:581] effCanDo: 'receiveVstMidiEvent' (return: 1)
[axFormatVst.h:581] effCanDo: 'sendVstMidiEvent' (return: 1)
[axFormatVst.h:581] effCanDo: 'midiProgramNames' (return: 0)
Here is the windows crash log:
Faulting application name: Cubase5.exe, version: 5.5.0.602, time stamp: 0x4c061a50
Faulting module name: mverb-vst-debug-x64.dll, version: 0.0.0.0, time stamp: 0x4c4f455f
Exception code: 0xc0000005
Fault offset: 0x00000000000152e0
Faulting process id: 0xa0c
Faulting application start time: 0x01cb319230bdbead
Faulting application path: C:\Program Files\Steinberg\Cubase 5\Cubase5.exe
Faulting module path: C:\Program Files\Steinberg\Cubase 5\VSTPlugIns\mverb-vst-debug-x64.dll
Report Id: ae08ec8c-9d85-11df-af01-0023543b64a8
Hope this helps.
-
- KVRian
- 674 posts since 22 Sep, 2007 from Caracas, Venezuela
It works great here with Reaper. No crashes or problems so far 
Thanks again lubomir.
@aircargo: I followed these steps and I can't reproduce it in Reaper
I guess it's something to do with Cubase.
Thanks again lubomir.
@aircargo: I followed these steps and I can't reproduce it in Reaper
-
- KVRian
- 1439 posts since 25 Nov, 2008 from Seattle, WA
I wouldn't say it's a problem *wih* cubase. But I guess it's a problem in mverb that is unique to cubase, maybe because it has been tested in Reaper but not Cubase yet.
-
- KVRian
- 674 posts since 22 Sep, 2007 from Caracas, Venezuela
likely, yes.aircargo wrote:I wouldn't say it's a problem *wih* cubase. But I guess it's a problem in mverb that is unique to cubase, maybe because it has been tested in Reaper but not Cubase yet.
-
lubomir.ivanov lubomir.ivanov https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=226506
- KVRist
- 31 posts since 22 Feb, 2010
thank you for the useful reports MN and aircargo.
aircargo, could you try this new build with cubase x64:
http://dl.dropbox.com/u/1627980/axon/mv ... ug-x64.zip
^ same link updated
ps: mind that this or similar issues are most likely framework related and not with x64 mverb specifically.
aircargo, could you try this new build with cubase x64:
http://dl.dropbox.com/u/1627980/axon/mv ... ug-x64.zip
^ same link updated
ps: mind that this or similar issues are most likely framework related and not with x64 mverb specifically.
linux/win32 framework for plugins and exacutables:
holos.googlecode.com
holos.googlecode.com
-
- KVRian
- 1439 posts since 25 Nov, 2008 from Seattle, WA
-
- KVRian
- 512 posts since 19 Jan, 2008 from Texas - USA
I need to say... I LOVE THIS REVERB!!!
Worked on some songs with my nephew this evening. This was all we used to help track the vocals.
This reverb ROCKS!!!
Thanks.
BBC
Worked on some songs with my nephew this evening. This was all we used to help track the vocals.
This reverb ROCKS!!!
Thanks.
BBC
-
- KVRist
- 144 posts since 11 Oct, 2006
i think this is the new free reverb king!
epicverb now is my second choice
epicverb now is my second choice
-
- KVRAF
- 2989 posts since 5 Nov, 2014
-
- KVRAF
- 3346 posts since 19 Mar, 2008 from germany
Thank you for pointing to the newest 64-bit version.
Martin's mverb is really one of the best.
free mp3s + info: andy-enroe.de songs + weird stuff: enroe.de
-
- KVRAF
- 2989 posts since 5 Nov, 2014
Like it a lot!
- KVRist
- 229 posts since 29 Apr, 2012 from Berlin
Hey guys,
I'm starting out with reverb designs, and found this gem. Thanks for sharing, Caco!
Also, thanks to other participants in this awesome topic - I've discovered tons of material to get inspiration and knowledge from, just opening the links and googling names from the discussion.
All the old links to MVerb source code are dead, so I downloaded it from https://rekkerd.org/martin-eastwood-audio-free-plugins/. Also, seems like there are at least three copies of this source code on Github. I don't know if the code is identical to the one initially shared, but it looks like it is not the final version from which the plugins were built.
I wrapped MVerb in IPlug2 (my fav) to play with the design. While doing this I've noticed a couple of pretty noticeable DSP bugs that wouldn't let me get it working right. The original version got the signal chain exploding by the end of the first buffer.
I decided to post them here for anyone interested. All of them are inside the MVerb class template. I write them in no particular order. And some of them are not bugs really.
DampingFreq and BandwidthFreq are normalized, as we see in the setters and in the logic of the process() method. However, they're initialized with absolute values in the ctor. If you'd like to experiment, there's no need to clamp them between 100 and 18.5k Hz. One can go with [0 - sampleRate / 2];
Some class members and their smooth counterparts are not consistent - smoothed versions are in absolute range.
There's a bug in setting the density param. If done too fast, MVerb starts to ring indefinetely long. You can catch it in the 2020 version too. It can be fixed together with improving the smoothing process. These params are better smoothed by the 1st order lowpass, and then scaled up to the absolute range in the loop, like this:
BandwidthSmooth = 0.999 * BandwidthSmooth + 0.001 * BandwidthFreq;
T bandw = BandwidthSmooth * SampleRate / 2;
// use bandw
Then, you'll need to set all the smooth members to their counterpart values in reset() method.
Density1 and Density2 are not initialized in the ctor at all.
This line is not correct:
Density2 = DecaySmooth + 0.15;
It should be
Density2 = Density1 + 0.15;
Smoothing the size is not meaningful since the filters are cleared on change anyway.
Also, max value of size may be 2, but that's a personal preference, again, for those who'd like to experiment.
Another personal preference is to set max val of decay to 1 to generate drone sounds. I really like how it worked out in WDL-OL version of Freeverb too
Then, depending on the setup, the smoothing may not be needed at all. I think it's better to put it outside, as well as changing mix and gain params.
getParameter() method has most of the mappings wrong. You can check it by setting the vals by printing on the keyboard in the 2020 version.
Operations on raw memory. One better go with std::array - the compiler will generate absolutely identical code.
I'm starting out with reverb designs, and found this gem. Thanks for sharing, Caco!
Also, thanks to other participants in this awesome topic - I've discovered tons of material to get inspiration and knowledge from, just opening the links and googling names from the discussion.
All the old links to MVerb source code are dead, so I downloaded it from https://rekkerd.org/martin-eastwood-audio-free-plugins/. Also, seems like there are at least three copies of this source code on Github. I don't know if the code is identical to the one initially shared, but it looks like it is not the final version from which the plugins were built.
I wrapped MVerb in IPlug2 (my fav) to play with the design. While doing this I've noticed a couple of pretty noticeable DSP bugs that wouldn't let me get it working right. The original version got the signal chain exploding by the end of the first buffer.
I decided to post them here for anyone interested. All of them are inside the MVerb class template. I write them in no particular order. And some of them are not bugs really.
DampingFreq and BandwidthFreq are normalized, as we see in the setters and in the logic of the process() method. However, they're initialized with absolute values in the ctor. If you'd like to experiment, there's no need to clamp them between 100 and 18.5k Hz. One can go with [0 - sampleRate / 2];
Some class members and their smooth counterparts are not consistent - smoothed versions are in absolute range.
There's a bug in setting the density param. If done too fast, MVerb starts to ring indefinetely long. You can catch it in the 2020 version too. It can be fixed together with improving the smoothing process. These params are better smoothed by the 1st order lowpass, and then scaled up to the absolute range in the loop, like this:
BandwidthSmooth = 0.999 * BandwidthSmooth + 0.001 * BandwidthFreq;
T bandw = BandwidthSmooth * SampleRate / 2;
// use bandw
Then, you'll need to set all the smooth members to their counterpart values in reset() method.
Density1 and Density2 are not initialized in the ctor at all.
This line is not correct:
Density2 = DecaySmooth + 0.15;
It should be
Density2 = Density1 + 0.15;
Smoothing the size is not meaningful since the filters are cleared on change anyway.
Also, max value of size may be 2, but that's a personal preference, again, for those who'd like to experiment.
Another personal preference is to set max val of decay to 1 to generate drone sounds. I really like how it worked out in WDL-OL version of Freeverb too
Then, depending on the setup, the smoothing may not be needed at all. I think it's better to put it outside, as well as changing mix and gain params.
getParameter() method has most of the mappings wrong. You can check it by setting the vals by printing on the keyboard in the 2020 version.
Operations on raw memory. One better go with std::array - the compiler will generate absolutely identical code.
Last edited by 1eqinfinity on Sun Jan 09, 2022 6:50 am, edited 2 times in total.
- KVRist
- 229 posts since 29 Apr, 2012 from Berlin
EpicVerb is one of the kind. I freaking love it ️VSTadapter wrote: Sun Aug 15, 2010 12:35 pm i think this is the new free reverb king!
epicverb now is my second choice
