Dragonfly Hall Reverb

All your LV2 and LADSPA goodness and more.

Moderators: khz, MattKingUSA

User avatar
Michael Willis
Establlshed Member
Posts: 491
Joined: Mon Oct 03, 2016 3:27 pm

Dragonfly Hall Reverb

Postby Michael Willis » Sun Nov 19, 2017 3:48 am

After a week of working on it, I have a working prototype of my reverb plugin.

https://github.com/michaelwillis/dragonfly-reverb

As I mentioned elsewhere, this is essentially just a port of Hibiki Reverb from freeverb3-vst, I can't take credit for the algorithms. This is the first real C++ project I've worked on for more than a decade, so it's very likely that I've done some rather insane things with the code.

I haven't uploaded any binary releases yet, so you'll have to build it for yourself. I wrote it with FalkTX's excellent Distrho Plugin Framework. Like other projects that use DFP, building it should just be a matter of running `make` from the project root dir, and then copy the binaries from under the bin dir to some place where your DAW (or other plugin host) will find it.

There's no custom graphical interface yet, but I was able to load it in Ardour and it gave me a reasonable interface of sliders and a preset selector.

It is primarily intended for use as a concert hall reverb, but it also has smaller presets like room, studio, and chamber. Also there is the obligatory enormous cathedral preset. I adapted the presets almost directly from Hibiki Reverb, which has much more variety in presets, like "Dark Room", "Small Narrow Hall", "Small Wide Hall", "Large Vocal Hall", etc. If anybody would find things like this useful, I can certainly add more. If you find some settings that you really like, let me know about them!

I know it has a lot of parameters; I actually did narrow them down from what was available in the freeverb3 algorithms (which had all kinds of LFO related stuff and other things that I trimmed down and left at reasonable defaults). There still remain two parameters that I honestly don't understand: spin and wander. Spin is the freq of some kind of LFO that modulates something, and wander seems to be a number of milliseconds that the spin is active. Please speak up if you can give me a better clue about what these do.

It would be stunning if I could get some feedback from the community about the code, bugs, the presets, the parameters, and/or how well you like the sounds you are able to get from it.

Cheers!

Edit: I forgot to mention, it builds both VST and LV2; for some reason the VST doesn't work for me, but the LV2 does.

User avatar
sadko4u
Establlshed Member
Posts: 595
Joined: Mon Sep 28, 2015 9:03 pm

Re: Dragonfly Hall Reverb

Postby sadko4u » Sun Nov 19, 2017 8:59 am

A bit code-review.

This is bad:

Code: Select all

    switch(index) {
      case  0:     dry_level    = (value / 100.0); break;
      case  1:   early_level    = (value / 100.0); break;
      case  2: early.setRSFactor  (value / 7.0);   break;
      case 3: early.setwidth (value / 100.0); break;


Please AVOID magic numbers.
LSP (Linux Studio Plugins) Developer and Maintainer.

User avatar
falkTX
Establlshed Member
Posts: 6645
Joined: Sat Jan 09, 2010 3:04 pm

Re: Dragonfly Hall Reverb

Postby falkTX » Sun Nov 19, 2017 11:22 am

the "magic" numbers I guess are because of the base dsp implementation of the reverb, which uses normalized values.

User avatar
Michael Willis
Establlshed Member
Posts: 491
Joined: Mon Oct 03, 2016 3:27 pm

Re: Dragonfly Hall Reverb

Postby Michael Willis » Sun Nov 19, 2017 4:32 pm

falkTX wrote:the "magic" numbers I guess are because of the base dsp implementation of the reverb, which uses normalized values.


Yes. I think sadko4u is saying that the code should explain what it is doing, like this:

Code: Select all

    switch(index) {
      case  DRY_LEVEL:     dry_level      = NORMALIZE_PERCENTAGE(value); break;
      case  EARLY_LEVEL:   early_level    = NORMALIZE_PERCENTAGE(value); break;
      case  EARLY_SIZE:    early.setRSFactor(value / params[EARLY_SIZE].range_max);   break;

User avatar
Michael Willis
Establlshed Member
Posts: 491
Joined: Mon Oct 03, 2016 3:27 pm

Re: Dragonfly Hall Reverb

Postby Michael Willis » Sun Nov 19, 2017 6:42 pm

I was wondering about the percentages, at first I thought it was better to express them as values from 0.0% to 100.0% (or 200.0% for values that can be doubled), but now I'm wondering if it would be just as well to express them as multiples, from 0.0x to 1.0x (or 2.0x). The latter way would eliminate the need to normalize the percentage value.

User avatar
sadko4u
Establlshed Member
Posts: 595
Joined: Mon Sep 28, 2015 9:03 pm

Re: Dragonfly Hall Reverb

Postby sadko4u » Sun Nov 19, 2017 7:45 pm

I was talking mostly about port identifiers. Percentages are intuitive understandable "magic" numbers;
LSP (Linux Studio Plugins) Developer and Maintainer.

User avatar
Michael Willis
Establlshed Member
Posts: 491
Joined: Mon Oct 03, 2016 3:27 pm

Re: Dragonfly Hall Reverb

Postby Michael Willis » Sun Nov 19, 2017 8:36 pm

sadko4u wrote:I was talking mostly about port identifiers. Percentages are intuitive understandable "magic" numbers;


Ok, understood. So if I make an enum of each parameter id, it will avoid possible problems if I ever add/remove/rearrange parameters.

ssj71
Establlshed Member
Posts: 1240
Joined: Tue Sep 25, 2012 6:36 pm

Re: Dragonfly Hall Reverb

Postby ssj71 » Mon Nov 20, 2017 4:14 pm

hey this is moving quickly! great work!

and +1 for the enum thing. :)
_ssj71

music: https://soundcloud.com/ssj71
My plugins are Infamous! http://ssj71.github.io/infamousPlugins
I just want to get back to making music!

finotti
Establlshed Member
Posts: 265
Joined: Thu Sep 01, 2011 9:07 pm

Re: Dragonfly Hall Reverb

Postby finotti » Mon Nov 20, 2017 5:22 pm

Thanks for doing this! I can't wait to try it out!

User avatar
Michael Willis
Establlshed Member
Posts: 491
Joined: Mon Oct 03, 2016 3:27 pm

Re: Dragonfly Hall Reverb

Postby Michael Willis » Mon Nov 20, 2017 5:29 pm

Hey FalkTX, every plugin I look at that is build on DPF encodes all raster image data in a cpp file, like this:

https://raw.githubusercontent.com/DISTRHO/MVerb/master/plugins/MVerb/DistrhoArtworkMVerb.cpp

It looks like the image arrays are in the format:

Code: Select all

{R1, G1, B1, A1, R2, G2, B2, A2, ... }

Is that correct?

Do you have some utility that converts an image file into a cpp array literal? If not, I could probably hack together a Python script to do it.

EDIT: Ha, just found it here... nevermind...

User avatar
Michael Willis
Establlshed Member
Posts: 491
Joined: Mon Oct 03, 2016 3:27 pm

Re: Dragonfly Hall Reverb

Postby Michael Willis » Mon Nov 20, 2017 5:35 pm

ssj71 wrote:hey this is moving quickly! great work!

finotti wrote:Thanks for doing this! I can't wait to try it out!

Thanks for the encouragement everybody.

I also forgot to mention that I'm primarily using a Mac laptop for development. I just tried building on Linux this morning and it didn't work :oops:

Once I get the build working on Linux, I'll put a beta releases for Linux and Mac on github for people to try.

glowrak guy
Establlshed Member
Posts: 1164
Joined: Sat Jun 21, 2014 8:37 pm

Re: Dragonfly Hall Reverb

Postby glowrak guy » Mon Nov 20, 2017 10:40 pm

https://build.opensuse.org/

I'm not a coder/builder, but maybe these folks could extend the range of your project?
Cheers

User avatar
Michael Willis
Establlshed Member
Posts: 491
Joined: Mon Oct 03, 2016 3:27 pm

Re: Dragonfly Hall Reverb

Postby Michael Willis » Mon Nov 20, 2017 11:22 pm

glowrak guy wrote:https://build.opensuse.org/

I'm not a coder/builder, but maybe these folks could extend the range of your project?
Cheers


Thanks. For now I'm just working on making a release that I'm happy with, then if it seems like people find it useful I can figure out a good way to distribute it.

User avatar
Michael Willis
Establlshed Member
Posts: 491
Joined: Mon Oct 03, 2016 3:27 pm

Re: Dragonfly Hall Reverb

Postby Michael Willis » Tue Nov 21, 2017 4:33 am

Ok, I fixed the Linux build, and released the first alpha version on github:

https://github.com/michaelwillis/dragonfly-reverb/releases/tag/0.0.1-alpha

Right now it's only the LV2 version for 64-bit Linux. Download the DragonflyReverb-LV2-linux-64-bit-v0.0.1.tgz file and unpack it somewhere that your DAW or plugin host will find it.

I tested it in Carla and it seemed to work ok.

Brief description of the parameters:

Dry Level, Early Level, Late Level - Percentage of each of these to combine into the output signal.
Early Size and Early Width make the shape of the early reflections. Think of size as being the distance from sound source to the listener, in meters. Width is a percentage of that size.
Early Low Pass - mostly self explanatory, a low pass filter on early reflections, measured in Hz.
Early Send - percentage of early reflections to feed into the late reverb algorithm.
Late Predelay - millisecond delay before late reverb starts
Late Decay Time - how many seconds the late reverb lasts
Late Size - depth of room or hall, in meters
Late Width - width of room or hall, as a percentage of Late Size param. Set to more than 100% for a very wide space
Late Low Pass - low pass filter on late reverb, in Hz.
Diffuse - percentage diffusion applied to late reverb.
Low Crossover, Low Decay Mult, High Crossover, High Decay Mult - The crossover parameters set thresholds in Hz that divide the late reverb into low, mid, and high frequencies. The decay multipliers are applied to the Late Decay Time. For example, consider the following settings: 2.0 Second Late Decay Time, 500Hz Low crossover, 2.5 X Low decay mult, 4000Hz High crossover, and 0.5 X High decay mult. Late reverb frequencies under 500Hz will last for 5.0 seconds. Those from 500Hz - 4000Hz will last for 2.0 seconds, and high frequencies above 4000Hz will last for 1.0 seconds.
Spin and Wander - I still don't really understand what these do, but the presets in Hibiki had very different settings for them, so they must be important :?

Please give it a try and report any feedback.

Edit: Another thing I forgot to mention, there are no library dependencies, I compiled everything into the binary, so you only need something that can host the LV2 plugin.

User avatar
sysrqer
Establlshed Member
Posts: 1448
Joined: Thu Nov 14, 2013 11:47 pm
Contact:

Re: Dragonfly Hall Reverb

Postby sysrqer » Tue Nov 21, 2017 7:37 am

Regarding presets, the more the better. I don't know about anyone else but I find creating reverbs to be very tedious, when presets usually work well enough.


Return to “Plugins, Effects and Instruments”

Who is online

Users browsing this forum: No registered users and 20 guests