Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lv2 UI - Testing #7201

Draft
wants to merge 59 commits into
base: master
Choose a base branch
from
Draft

Lv2 UI - Testing #7201

wants to merge 59 commits into from

Conversation

JohannesLorenz
Copy link
Contributor

@JohannesLorenz JohannesLorenz commented Apr 8, 2024

This is solely for early testing yet. From the code review perspective, there are still a few things to be done.

When reporting an issue, please try to answer the following questions:

  1. Does this issues occur in any other host, like Ardour/Jalv/...?
  2. If the issue happens with UI, does it also happen if UI is turned off? (Edit -> Settings -> Performance -> Plugins -> External plugin embedding -> "No embedding")

Open issues:

  • The size and the resizability seem sometimes buggy in this PR (LV2_UI__noUserResize. LV2_UI__fixedSize)
    • "Rotary Speaker - simple" is way too small
    • Issues with Cardinal Synth
    • Effects have the resize markers even if not resizable
    • Sometimes, plugins UIs do not have optimal size. Reason: Lv2ViewProc inside Lv2ViewBase might be embedded wrong? Waiting on L/R routing, see below
  • Ban plugins if they are GUI only AND GUI is not enabled
  • LSP EQs cannot use any filters
  • Implement requestValue (this has to wait for the Patch extension)
  • Implement ShowInterface (will not be implemented for now)
  • Implement touch - NO, separate PR
  • Add Mono-Effects to ban-list if there are analogue Stereo effects (especially LSP)
  • Rebase on messmerd's L/R routing (after it has been finished, also waiting on Add L/R channel routing for VST plugins #7247 )
  • X42 effects have only GTK UI - are not loadable with this PR - jalv has the same problem - x42 effects need Qt UI for that
  • Effects do not seem to load anything (Ping Pong Pan, 3 Band EQ)
  • setBfree/Dexed issues
  • Dexed octave issues

@JohannesLorenz
Copy link
Contributor Author

This now runs successfully in the CI, and it supports UI there for Linux and Macos, but not Windows yet. @DomClark , as discussed, I would appreciate if you would submit a vcpkg PR (and then add suil to our vcpkg.json in this PR or tell me to). In the end, the CI for Windows should not show

* SUIL for plugin UIs         : not found, install it or set PKG_CONFIG_PATH appropriately

but

* SUIL for plugin UIs         : OK

@zonkmachine
Copy link
Member

Dexed.

  • When I press it's built-in keyboard there is only sound in the left channel.
    Sending a note from lmms presents sound on both channels but if I change sound on Dexed, the left channel will follow the new setting but the right will stay with the default sound.

  • Octaves. Dexed C4 corresponds to LMMS C5. Both can't be right. Right?

@zonkmachine
Copy link
Member

  • When I press it's built-in keyboard there is only sound in the left channel.

I assume it's related to this PR: #7247

@messmerd
Copy link
Member

I assume it's related to this PR: #7247

The LV2 implementation in LMMS uses linked models, so mono plugins are actually 2 linked plugin instances (L and R) behind the scenes. Linked models need to be kept in sync for parameter updates which is already a complicated task, but adding a UI where updates can come not just from LMMS but also the plugin itself makes the linked model design untenable in my opinion. The issue with dexed sounds like exactly the type of synchronization problem I feared.

I would strongly recommend to @JohannesLorenz to replace the linked model design with the L/R routing design from #7247 once it's merged. I've been using it successfully for both CLAP and VST plugins and it works great. Making the switch will almost certainly be less work than trying to fix the bugs with linked models.

Not only is the L/R routing approach dramatically simpler and less buggy than trying to use linked models, it is also very flexible and intuitive from a user standpoint and uses roughly half the resources in the common situation where you only want a mono-to-stereo mix from your mono plugin.

@michaelgregorius
Copy link
Contributor

I assume it's related to this PR: #7247

The LV2 implementation in LMMS uses linked models, so mono plugins are actually 2 linked plugin instances (L and R) behind the scenes. Linked models need to be kept in sync for parameter updates which is already a complicated task, but adding a UI where updates can come not just from LMMS but also the plugin itself makes the linked model design untenable in my opinion. The issue with dexed sounds like exactly the type of synchronization problem I feared.

Has this already been fixed? It sound like a waste of resources, a source for tons of bugs and a complete misunderstanding of how these things work. Sorry, if I am a bit blunt here but keeping it like this would take the implementation in a completely wrong direction. I am pretty sure that no other DAW implements it like this.

If a plugin reports as mono then simply copy the resulting mono output buffer of the single instance into the left and right channel buffers of the stereo track.

I would strongly recommend to @JohannesLorenz to replace the linked model design with the L/R routing design from #7247 once it's merged. I've been using it successfully for both CLAP and VST plugins and it works great. Making the switch will almost certainly be less work than trying to fix the bugs with linked models.

100% agree!

@tresf
Copy link
Member

tresf commented Jun 5, 2024

I pushed a few commits to help with AppImage findings over on Discord's #testing channel.

For now, I copy the suil-0 modules to <APPDIR>/lib/suil-0/, but I can't find a suil API to notify it of this location, so per @JohannesLorenz's advice, I set SUIL_MODULE_DIR in our launcher script.

(Until #7252 is merged, I can't test this on ARM64, so I'm just hoping this fixes the AppImages)

Initial testing on MacOS is OK but we don't use a launcher script for MacOS, Perhaps qputenv() combined with qApp->applicationDirPath() + "../Frameworks/suil-0/? Thoughts welcome

Screenshot 2024-06-05 at 12 15 54 AM

@tresf
Copy link
Member

tresf commented Jun 5, 2024

Initial testing on MacOS is OK but we don't use a launcher script for MacOS, Perhaps qputenv() combined with qApp->applicationDirPath() + "../Frameworks/suil-0/? Thoughts welcome

Done via 5bb73b0. Feel free to move the code elsewhere if needed.

tresf added a commit to tresf/lmms that referenced this pull request Jun 6, 2024
@zonkmachine zonkmachine marked this pull request as ready for review June 11, 2024 17:19
@zonkmachine zonkmachine marked this pull request as draft June 11, 2024 20:24
@zonkmachine
Copy link
Member

When I reload a project the lv2 gui doesn't update. The settings seem to stick, just the gui is showing it's init setting.

@JohannesLorenz
Copy link
Contributor Author

When I reload a project the lv2 gui doesn't update. The settings seem to stick, just the gui is showing it's init setting.

@zonkmachine Can you please elaborate?

I did:

  • Creat a new Lv2 project, opened Vitalium, changed some params, saved the project
  • File -> Recently Opened Projects ->
  • Reopen the Vitalium UI

=> All params are as before.

Did I understand "reload" wrong?

@zonkmachine
Copy link
Member

* Creat a new Lv2 project, opened Vitalium, changed some params, saved the project

* File -> Recently Opened Projects ->

* Reopen the Vitalium UI

=> All params are as before.

With nekobi I do:
nekobisave

I save and reload and I get:
nekobisave2

The sound is the same as when I saved but the settings show a default nekobi.

@JohannesLorenz
Copy link
Contributor Author

@zonkmachine Thanks. I fixed it.

@zonkmachine
Copy link
Member

@zonkmachine Thanks. I fixed it.

This took care of the instruments but the effects see the same issue and this is not fixed by 3bcf80b.

@JohannesLorenz
Copy link
Contributor Author

This took care of the instruments but the effects see the same issue and this is not fixed by 3bcf80b.

Actually, this commit should have fixed it for both... Which effect do you mean?

Sometimes, producing input for an effect (i.e. pressing a key) might force a lazy UI to update. Not sure if this helps here.

@zonkmachine
Copy link
Member

Actually, this commit should have fixed it for both... Which effect do you mean?

Ping Pong Pan
3 Band Eq
GxRedeye Chump

There were more. Actually, the only Lv2 effect with gui that I've come across that works in this regard is Calf Analyzer (not an effect per se but the stored parameters are displayed correctly when reloading a project).

Sometimes, producing input for an effect (i.e. pressing a key) might force a lazy UI to update. Not sure if this helps here.

Nope.

@JohannesLorenz
Copy link
Contributor Author

JohannesLorenz commented Jun 16, 2024

Oh, I get it. For instruments, first, the instrument is loaded, which includes loading the savefile. Only after that, the UI is initiated - at which time the mentioned fix sends all port values (knobs, sliders etc) to the UI.
For effects, the UI seems to be opened immediately, and the default values are sent to the UI. Only after that, the savefile values are being loaded, but they are not sent to the UI anymore.

Thinking about a fix...

Confirming: Ardour sends port updates of all ports to UI after loading a preset (LV2PluginUI::queue_port_update).

@zonkmachine
Copy link
Member

New issue. The setBfree organ plugin doesn't save the settings at all.

@JohannesLorenz
Copy link
Contributor Author

New issue. The setBfree organ plugin doesn't save the settings at all.

Does this work in Ardour or another DAW (my favorite question to procrastinate all bugs)?

@zonkmachine
Copy link
Member

Does this work in Ardour

Yes. Works fine in Ardour.

@zonkmachine
Copy link
Member

setbfree gui explained here: https://setbfree.org/lv2/lv2_setbfree_up.html
I think it could be because it uses presets and it's not implemented yet. Like Dexed.

@JohannesLorenz
Copy link
Contributor Author

I think it could be because it uses presets and it's not implemented yet. Like Dexed.

I think some use "Preset" and some use "State". Multiple of them contain "organ" in the description. Do you mean any specific one?

@zonkmachine
Copy link
Member

Do you mean any specific one?

No. I'm very unspecific here.

@JohannesLorenz
Copy link
Contributor Author

I cannot reproduce your Dexed issues: I turned all 8 "EG" level in "1" to 0, and when loading, they were still 0 and I think it sounded correct. How do I reproduce?

With X42 whirl (from the b_free plugins), I can reproduce the issue.

@JohannesLorenz
Copy link
Contributor Author

I fixed really a lot of issues. One remaining issue though is that the opening LMMS effect window sometimes is a bit too small to contain the UI. This will hopefully be fixed soon.

Aside from this, if anyone finds any issues with the current version, please post it.

Also, keep in mind the "When reporting an issue" section from above, and keep in mind that the PR does not cover automation of UI controls, presets and LMMS file browsers inside of the UI.

@zonkmachine zonkmachine marked this pull request as ready for review July 1, 2024 12:38
@zonkmachine
Copy link
Member

I can't believe I did this again... Oh, lawd!

@zonkmachine zonkmachine marked this pull request as draft July 1, 2024 12:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants