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 extension plan #4954

Open
JohannesLorenz opened this issue Apr 20, 2019 · 20 comments
Open

Lv2 extension plan #4954

JohannesLorenz opened this issue Apr 20, 2019 · 20 comments

Comments

@JohannesLorenz
Copy link
Contributor

JohannesLorenz commented Apr 20, 2019

** This is WIP **

Background

Lv2 has many extensions, and some of them contain features. Extensions are things the plugin provides for a host, and features are things the host provides for a plugin. Note: Even if a host does not care about a specific extension, the plugin can require a feature from that extension, which means the plugin won't run without it.

Purpose

This plan helps to identify

  • which extensions we should implement
  • in what order

Table

Extension Things to use Features to implement Status Depends on Assignee
Atom MIDI, UI, TimePosition No features exist ✔️ (basic atom support done)
Buf Size ✔️
Data Access None. Discouraged. - ✔️ (nothing to do)
Dynamic Manifest
Instance Access
Log
Lv2 ✔️ (#5795 missing yet) -
Midi ✔️
Morph
Options ✔️
Parameters lv2:wetDryRatio (for Effect wet/dry ratio), ...? -
Patch
Port Groups
Port Properties "causesArtifacs", "nonAutomatic", "trigger", "rangeSteps" only "logarithmic" done
Presets
Resize Port
State URID ✔️
Time
UI @JohannesLorenz
Units
URID Only features All ✔️ -
Worker @JohannesLorenz
@Spekular
Copy link
Member

@JohannesLorenz URID should be marked as done now, shouldn't it?

@JohannesLorenz
Copy link
Contributor Author

@Spekular Yes, I forgot that. Thanks, fixed now.

@zonkmachine
Copy link
Member

@JohannesLorenz Did #5691 implement all ot the Atom extension?

I've played around with LV2 now and it's brilliant. Thank you so much for working on this!

I installed a whole bunch of plugins via the ubuntu repo and of the ones who wouldn't load into lmms on start the most common message was:
required feature not supported : http://lv2plug.in/ns/ext/worker#schedule

Next most are:
too many audio output channels ...

and the 'zyn' stuff calling for:
required feature not supported : http://lv2plug.in/ns/ext/options#options

@JohannesLorenz
Copy link
Contributor Author

Thanks @zonkmachine . I updated Atom, we only support MIDI atoms now (all other are discarded). This whole plan may be a bit inexact sometimes.

My next plans are indeed options and buf-size. If worker is easy, we can add that, too. Too many audio output channels: I don't know how this could be fixed best. If you have more than 2, which ones shall be sent to LMMS and which ones shall be ignored?

Btw: Which ubuntu lv2 plugins did you install? Can you please add it on the Lv2 wiki page?

@mxmilkiib
Copy link

I've added a wiki note.

@enp2s0
Copy link
Contributor

enp2s0 commented Oct 24, 2020

@JohannesLorenz for the too many outputs case I would route 1 -> left and 2 -> right, ignoring the rest.

@JohannesLorenz
Copy link
Contributor Author

for the too many outputs case I would route 1 -> left and 2 -> right, ignoring the rest.

I don't think it's a good solution... For many plugins, the use might not make sense or even be unclear if only 2 of >2 audio outputs are connected. Imagine a "2 -> 4 split" plugin that takes a stereo signal and sends out the left signal to the first stereo output and the right signal to the second stereo output. If you only offer one stereo output for this, this plugin will always ignore the right signal, looking like a bug.

@JohannesLorenz
Copy link
Contributor Author

I'll code "worker" next.

@zonkmachine
Copy link
Member

I marked Buf Size done in the list above.

@JohannesLorenz JohannesLorenz removed their assignment Jul 19, 2022
@PhysSong PhysSong moved this to To do in Add LV2 support Aug 2, 2022
@JohannesLorenz
Copy link
Contributor Author

I've been checking for lv2-plugins which have features we don't support (this can be seen by starting lmms with LMMS_LV2_DEBUG=1 environment variable: required feature not supported). I could not find any except state#loadDefaultState and worker#schedule (the latter being work in progress). If anyone sees another one, it would be nice if you would write it down here.

@zonkmachine
Copy link
Member

zonkmachine commented Aug 13, 2022

Edit: I was wrong...
I haven't been able to find any but some plugins show up with a can not be loaded: and no further message specified.

Example:

Lv2 plugin "Matrix Mixer 8x8" (URI: http://gareus.org/oss/lv2/matrixmixer#i8o8 ) can not be loaded:
Lv2 plugin "MIDI Key-Range Filter" (URI: http://gareus.org/oss/lv2/midifilter#keyrange ) can not be loaded:
Lv2 plugin "MIDI Key-Range Filter" (URI: http://gareus.org/oss/lv2/midifilter#keyrange ) can not be loaded:
Lv2 plugin "MIDI Key-Range Filter" (URI: http://gareus.org/oss/lv2/midifilter#keyrange ) can not be loaded:

@JohannesLorenz
Copy link
Contributor Author

JohannesLorenz commented Aug 13, 2022

some plugins show up with a can not be loaded: and no further message specified.

Actually, it only prints "can not be loaded" if it has at least one reason, so it's really strange you get these. At least, I get messages for them:

Lv2 plugin "Matrix Mixer 8x8" (URI: http://gareus.org/oss/lv2/matrixmixer#i8o8 ) can not be loaded:
  -  too many audio input channels : 8
  -  too many audio output channels : 8
Lv2 plugin "MIDI Key-Range Filter" (URI: http://gareus.org/oss/lv2/midifilter#keyrange ) can not be loaded:
  -  no audio output channel

@zonkmachine
Copy link
Member

Actually, it only prints "can not be loaded" if it has at least one reason,

Yes. I had made some changes to poke a couple of plugins a bit. Reverted that and now I get those messages too. Sorry...

@zonkmachine
Copy link
Member

zonkmachine commented Aug 20, 2022

I've been checking for lv2-plugins which have features we don't support

Yes indeed! I'm now running "Super Whammy" from MOD Devices with automation on the knobs. Bliss! All that was needed was to set the buffer to a multiple of 2 and to insert m_supportedFeatureURIs.insert(LV2_BUF_SIZE__powerOf2BlockLength); in Lv2Manager.cpp . Totally worth it!

Issue opened: #6492

@mxmilkiib
Copy link

mxmilkiib commented Aug 20, 2022

I guess #5330 and #5795 (CV ports) would come under lv2core?

@JohannesLorenz
Copy link
Contributor Author

I guess #526 and #5795 (CV ports) would come under lv2core?

#5795: Good point, added.
#526: This looks like a typo? It's not Lv2 related.

@mxmilkiib
Copy link

Whoops yes, I think I was meaning #5330

@JohannesLorenz
Copy link
Contributor Author

JohannesLorenz commented Aug 21, 2022

#5330 is interesting, but how related to Lv2 core? Is there an Lv2 plugin existing with that functionality?

@mxmilkiib
Copy link

mxmilkiib commented Aug 22, 2022

@JohannesLorenz
Copy link
Contributor Author

Most non-extraordinary extensions seem to be done/in progress.

As I think we should target UI ASAP, this should be the next target. Only state and preset seem to be useful to do before it (not sure yet).

Other interesting stuff seem to be CV ports. Other things seem extraordinary to me.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: To do
Development

No branches or pull requests

5 participants