Skip to content

Use MVerb by Martin Eastwood for reverberation - #3787

Open
dingodoppelt wants to merge 6 commits into
jamulussoftware:mainfrom
dingodoppelt:mverb
Open

Use MVerb by Martin Eastwood for reverberation#3787
dingodoppelt wants to merge 6 commits into
jamulussoftware:mainfrom
dingodoppelt:mverb

Conversation

@dingodoppelt

@dingodoppelt dingodoppelt commented Jul 17, 2026

Copy link
Copy Markdown
Member

Short description of changes

This replaces the inbuilt reverb with MVerb by Martin Eastwood.

CHANGELOG: Use MVerb by Martin Eastwood for reverberation

Context: Fixes an issue?

This replaces the inbuilt reverb with a professional grade reverb algorithm:

MVerb is a free, studio quality, open-source reverb. Its release is intended to provide a practical demonstration of Dattorro's figure-of-eight reverb structure and provide the open source community with a high quality reverb.

Does this change need documentation? What needs to be documented and how?

Status of this Pull Request

Up for discussion

What is missing until this pull request can be merged?

As this has not been tested thoroughly I'd like to keep it a draft for now

Checklist

  • I've verified that this Pull Request follows the general code principles
  • I tested my code and it does what I want
  • My code follows the style guide
  • I waited some time after this Pull Request was opened and all GitHub checks completed without errors.
  • I've filled all the content above

@dingodoppelt

dingodoppelt commented Jul 17, 2026

Copy link
Copy Markdown
Member Author

The builds fail, because MVerb was pulled in as a submodule and we seem to only clone them for android builds.

Edit: fixed

@pljones

pljones commented Jul 17, 2026

Copy link
Copy Markdown
Collaborator

The builds fail, because MVerb was pulled in as a submodule and we seem to only clone them for android builds.

I wonder if the sub-module clone can be repo-specific, so we can have one that only does liboboe for Android and another that does this for all platforms, included in the main clone step.

That suggests we also need build documentation changes included here.

@dingodoppelt

dingodoppelt commented Jul 17, 2026

Copy link
Copy Markdown
Member Author

I wonder if the sub-module clone can be repo-specific, so we can have one that only does liboboe for Android and another that does this for all platforms, included in the main clone step.

autobuild.yml currently handles submodules only for android, because oboe is our only submodule.
I have never had reasonable success with autobuilds on github, especially since I don't know how to properly test these scripts locally before releasing my embarrassing attempts to the world. Any advice on how to do that the right way?

That suggests we also need build documentation changes included here.

Haven't though about that but, yes, certainly.

Edit:
We could have Jamulus.pro check for existence of MVerb.h. If not found we can fail with an error message telling the user to run a target make submodules which would clone MVerb for all platforms and oboe only for android or just do it automatically. Just an idea because I just remembered typing make submodules at least once somewhere else.

@ann0see

ann0see commented Jul 17, 2026

Copy link
Copy Markdown
Member

how to properly test these scripts locally before releasing my embarrassing attempts to the world.

If it is not in .github they should be designed to build .deb/.dmg/.exe/.ipa/.apk I believe that this is not achieved at the moment. However, you can try and see where they fail.

@ann0see

ann0see commented Jul 17, 2026

Copy link
Copy Markdown
Member

For my taste, it is a bit too "far" .

@dingodoppelt

dingodoppelt commented Jul 17, 2026

Copy link
Copy Markdown
Member Author

For my taste, it is a bit too "far" .

It is nothing that is "needed" but the current reverb sounds horrible, tbh.
If we ever really needed a reverb (and I heavily doubt that) we should have used this in the first place or rip it out entirely, which would be my second choice after at least trying to improve things. Have you listened to MVerb in comparison to the current implementation?

@ann0see

ann0see commented Jul 17, 2026

Copy link
Copy Markdown
Member

Yes. I think the reverb implemented here (this PR) sounds too far. Yes, probably better than what we have at the moment.

@ann0see

ann0see commented Jul 17, 2026

Copy link
Copy Markdown
Member

Actually, we could also only include the reverb if the submodule was loaded.

@dingodoppelt

Copy link
Copy Markdown
Member Author

Yes. I think the reverb implemented here sounds too far. Yes, probably better than what we have at the moment.

I used one of the presets just to have at least something to start from. I'm not with my usual gear but will be tomorrow. I'll tweak some settings and try with different instruments and hopefully find a useful preset.

@dingodoppelt

Copy link
Copy Markdown
Member Author

Just a thought: We could easily expose the reverb parameters via JSON-RPC and store them in the .ini file

@pljones

pljones commented Jul 18, 2026

Copy link
Copy Markdown
Collaborator

You should be able to test the autobuild scripts on your own repo without raising a PR by pushing to a branch starting with "autobuild" -- I think.

@dingodoppelt

Copy link
Copy Markdown
Member Author

You should be able to test the autobuild scripts on your own repo without raising a PR by pushing to a branch starting with "autobuild" -- I think.

Yes, that works. But I meant locally as in my machine. I found something which involved containers and didn't work for windows so I guess I'll stick to my github repo.

@ann0see

ann0see commented Jul 18, 2026

Copy link
Copy Markdown
Member

It should definitely have the presets as configuration option in the Advanced Setup screen too.

@dingodoppelt

Copy link
Copy Markdown
Member Author

It should definitely have the presets as configuration option in the Advanced Setup screen too.

I wasn't too sure about how to handle this. Either make it JSON-RPC exclusive or have power users and nerds edit their INI files, which is dead easy. I didn't want to bloat the UI with a setting nobody actually requested.
I've never worked on UI things so that might take a little while to get into. I just got the autobuilds fixed so I'll push that first.

@ann0see

ann0see commented Jul 18, 2026

Copy link
Copy Markdown
Member

I also only have limited UI understanding. I think @ignotus666 knows more.

@dingodoppelt

Copy link
Copy Markdown
Member Author

For my taste, it is a bit too "far" .

I guess this is due to the "predelay" parameter setting. I chose a preset with no pre-delay.
We can always add new presets but I just copied those from the VST plugin for now.

@dingodoppelt

Copy link
Copy Markdown
Member Author

It should definitely have the presets as configuration option in the Advanced Setup screen too.

Done

@dingodoppelt

dingodoppelt commented Jul 19, 2026

Copy link
Copy Markdown
Member Author
  • Linux amd64 works (tested debian autobuild binary and local arch linux build with gcc16 and qt6)
  • Android works (tested on Android 17/GrapheneOS)

@dingodoppelt
dingodoppelt force-pushed the mverb branch 2 times, most recently from 207c103 to 3b78ee6 Compare July 19, 2026 15:51
@dingodoppelt dingodoppelt added the needs documentation PRs requiring documentation changes or additions label Jul 19, 2026
@ann0see

ann0see commented Jul 30, 2026

Copy link
Copy Markdown
Member

After some more thinking: I think we should indeed detect if the submodule was cloned. If not the reverb feature should be hidden and while running qmake a warning should be issued.

I suspect that you could check if the folder contains the reverb code and if not set pre processor flags -> use ifdefs in the code to remove the reverb functionality. For the UI hide or remove it it if reverb is not compiled. I would personally not use reverb even in this upgraded state.

@dingodoppelt

Copy link
Copy Markdown
Member Author

After some more thinking: I think we should indeed detect if the submodule was cloned. If not the reverb feature should be hidden and while running qmake a warning should be issued.

I suspect that you could check if the folder contains the reverb code and if not set pre processor flags -> use ifdefs in the code to remove the reverb functionality. For the UI hide or remove it it if reverb is not compiled. I would personally not use reverb even in this upgraded state.

I'd then argue it should be on by default and a qmake option noreverb should be introduced. We could clone the submodule if it isn't there and noreverb isn't set.

@ann0see

ann0see commented Jul 30, 2026

Copy link
Copy Markdown
Member

Maybe yes.

Better ask the user: Reverb not found. Want to clone?

@pljones

pljones commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

Better ask the user: Reverb not found. Want to clone?

No, qmake and make aren't interactive processes. You pass flags.

@ann0see

ann0see commented Jul 30, 2026

Copy link
Copy Markdown
Member

Ok. Fair point.

@dingodoppelt
dingodoppelt force-pushed the mverb branch 2 times, most recently from e30cdf7 to 82b5a5a Compare August 9, 2026 22:21
@dingodoppelt

dingodoppelt commented Aug 9, 2026

Copy link
Copy Markdown
Member Author

Maybe yes.

Better ask the user: Reverb not found. Want to clone?

QMake will try to clone the submodule if it can't find it and noreverb is not set. If the clone fails it will fall back to noreverband build nonetheless. It could be argued we want to fail instead because the user intended to build with reverb because noreverb wasn't set.

Edit, a small excerpt from the autobuilds:

Submodule 'libs/mverb' (https://github.com/martineastwood/mverb.git) registered for path 'libs/mverb'
Cloning into '/home/runner/work/jamulus/jamulus/libs/mverb'...
Submodule path 'libs/mverb': checked out '9f9512e9d990fcf265e00fc7c2ee47ad20c8019f'
Project MESSAGE: building with MVerb

Comment thread Jamulus.pro Outdated
@dingodoppelt
dingodoppelt marked this pull request as ready for review August 9, 2026 22:32
@dingodoppelt
dingodoppelt force-pushed the mverb branch 3 times, most recently from 3933834 to 4d4f3f3 Compare August 12, 2026 17:25

@ann0see ann0see left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Weirdly no reverb seems to hide the pan pots on macOS.

@github-project-automation github-project-automation Bot moved this from Triage to Waiting externally in Tracking Aug 13, 2026
Comment thread src/clientdlg.cpp
Add reverb preset selection to advanced settings dialogue

make "Stadium" the default reverb preset

Make reverb buffers protected members

Add reverb presets
Optionally build without the reverb plugin and hide all related UI elements
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature request Feature request needs documentation PRs requiring documentation changes or additions

Projects

Status: Waiting externally

Development

Successfully merging this pull request may close these issues.

4 participants