Dragonfly Reverbs for Classical

I’m running Jack without realtime and 48kHz/1024 fpp/2 buffers.
Ubuntu 18.04 on an i5 650 CPU, using the MB’s built in sound card.
It’s mostly for testing purposes.

This is very mysterious. From Ardour’s POV there should not be a difference.

Does this only happen if there is more than one plugin instance? If so that might indicate some static shared variable in the plugin.

One thing that Ardour does directly after loading a session is to process silence a few times, to warm up caches. Maybe that can lead to denormals in some internal state of the plugin?

I have tried really hard to avoid any static or global values, and freeverb3 makes liberal use of a macro called UNDENORMAL… Yet I still have the occasional bug report that invariably happens to somebody who is using multiple instances of these plugins. I’ll have to scour through the dependencies again and see if I can find anything.

It may well be some Ardour issue, but I don’t have an explanation what that’d be yet.

When loading a session the plugins are instantiated in sequence (single thread), just like adding them from the GUI would.

However when using the GUI:

  1. the plugin is instantiated and added
  2. the plugin is activated
  3. the plugin runs

and only then you can add the next one.

When loading a session:

  1. all plugins are instantiated and added
  2. all plugins are activated
  3. all plugins may run the first time simultaneously, when you have more than one CPU core.

Can you check Ardour Preferences > General > CPU/DSP utilization > 1 processor.
With only one processor, the plugins’ first run() cannot be in parallel.

The only cases where I could run several times w/o xruns is in the single processor setting.
Xruns seem to only occur in the ‘all processors’ setting.

1 Like

Is this only when loading sessions with more than one Dragonfly?
or also when you create a new session and then add them one by one?

The usual experience is that adding tracks to a project, adding dragonflies, sounds okay. Some other time I reload for a final mix and get xruns all over.

I have a 4 core i5 650.
If I add a Dragonfly each to 12 channels, disable all but 3, set Ardour to use all 4 cores, save and restart the session I get about 40 DSP xruns as the session loads. Possibly due to the silence processing Robin mentioned earlier.
I can then re-enable the other 9 and have no or quite few xruns.

If I disable all but 4 and save and restart I get the 40 initial xruns but after that I get about 1 xrun every second.
If I then disable one of the four I get back to very few and then I can re-enable the rest without any increase.

It’s a 40ish track session with a number of x42 and sapista/EQ10q plugins as well. The DSP load is around 17% with the 12 Dragonflies disabled and around 50% with them enabled.

The Room reverb seems to be the problematic one.
I get frequent DSP xruns when I start a session with more active Rooms (5) than physical CPU cores (4) but I can load a session with 13 active Halls without any problems.

Loading 4 active Rooms when I’ve limited Ardour to use only 3 cores seems to work pretty good as well, so it’s doesn’t seem to be a strict DSP CPU + 1 problem.

After the information that @sciurius provided, I no longer think that is the case.

  • it works when using only one instance of dragonfly reverb. The problem only manifests when using more than one instance.
  • it also works with multiple instances when setting Ardour to use only 1 core.

So this is more likely some concurrency issue during initialization of the plugin.

Are you sure that those instances do initially run in parallel? if you have more than 3 tracks, or if there are connection dependencies between tracks that have the reverb plugins, they might not.

To clarify; the 40ish numbers of xruns take place at startup. I see them in the DSP indicator as soon as the Editor window appears.
QJackCtl doesn’t show any xruns at that point.

I can load a session with 3 active Rooms without getting more DSP xruns than the initial ones and if I load 4 active I only get the occasional xrun.
Also; I seem to be getting more xruns when in Pause rather than Play.

The session has 40ish tracks, 10ish x42/EQ10q effects and the Dragonflies. The tracks aren’t connected to any common buses or so, other than the master bus.

If I disable all the Rooms and immediately re-enable them again I don’t get any subsequent xruns. The problem only manifests itself when there are active Rooms on startup and it persists until the Rooms have been “rebooted”

This is likely a concurrency-related bug in Dragonfly Room. Until I am able to identify the problem and fix it, I suggest using a reverb bus with a single instance of the plugin, and routing signal from your tracks via aux sends.

1 Like

This should really be the default anyway. One should place a mix in a single space, and not mix different reverbs in a single session.

An exception may be some spring reverb specific to guitars, or maybe some room for the snare.
Yet for classical music, the whole band^Worchestra is usually in the same space.

While I only use one for almost all classical stuff I do, there are MIDI mock-ups that can benefit from multiple reverb busses, maybe 4 in total: front, middle, back and maybe even another beyond that. See here: https://mattiaswestlund.net/?page_id=448

I think the pre-delay, early reflections and attack can make subtle differences to the realism. It’s been a long time since I did this sort of stuff but I know folks for whom this remains their general template.

2 Likes

From the page linked page:

Optimally you should you use several reverb busses using the same basic reverb sound but with subtly different settings to mimic the way sound waves behave coming from varying distances.

That is a very good point, thanks for linking to that page.

I was indeed over-generalizing when suggesting that one should use a single reverb. It is really about a common space.

– At least in this context where reverb is not being used as artistic effect.

2 Likes

Just chipping in with another x-run find. There are no problems that I can find when running the reverbs directly in the DAW but when I’m running a soundfont in Carla along with Dragonfly Plate and Hall all in JACK, sometimes the DSP load oscillates between c. 15% and north of 50% along with wild x-run numbers. It’s not all the time but all of a sudden the numbers will spike and only when I disable and re-enable Dragonfly 'verbs do things settle down again.

Frankly, I’m putting this down to a Carla issue but just an FYI…

On a related note, the plate+hall plan for my keyboard instrument seems to be working out a treat! :smiley:

You could try an alternative to Carla. What kind of soundfont are you using? If it is SFZ, you could try sfizz or liquidsfz. SF2 soundfonts can be rendered using the a-Fluid Synth plugin that is distributed with Ardour.

I’m glad to know that the plate is working out! Are you using it for harpsichord?

That will be my next step. I’m using a simple chain of a couple of Robin Gareus’ MIDI filters (velocity adjust and chromatic transpose) along with Dragonfly plate and hall. I’m not sure why I defaulted to Carla, to be honest other than it was my default while playing live in JACK.

Well, there’s the interesting thing: yes and no. My favorite keyboard instrument of all time is a Lautenwerck made by Keith Hill (and now owned and recorded by Wolfgang Rübsam). There is no surviving historical instrument but it is a gut-stringed harpsichord with the most beautiful tone I’ve ever heard. It really is heavenly. I’ve been on the search for a virtual version for a long time and the Realsamples one is just nothing like the real deal. To cut a long story short, I found an SF2 on the Musescore forum that includes a Lautenwerck. I have NO idea where the samples come from but they are clearly adapted from a lute stop of maybe a harpsichord, virginal or spinet (except none that I recognize). Playing it through your plate and hall reverbs brings it alive enough that I can believe I’m listening to a cross between a clavichord and a lautenwerck. Therefore, I’m calling it a “Lautenchord”. It even manages some subtle dynamics like the clavichord. Glad you asked?!

EDIT: I loaded up the “Musica Barocca” SF2 in Polyphone and found that the Lautenwerck is using the lute stop from the free Blanchet harpsichord (Soni Musicae). Mystery solved…

Oh, and in case you were interested in the settings I used, for the plate I’m using the “dark” setting (nested) but with the decay up to 3.3s and wet level at 10%. The Hall uses the medium clear hall setting with default settings except decay pushed to 2.2s. The modulation values seem great as is.

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.