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

VST effect plugins #9019

Open
mixxxbot opened this issue Aug 23, 2022 · 25 comments
Open

VST effect plugins #9019

mixxxbot opened this issue Aug 23, 2022 · 25 comments

Comments

@mixxxbot
Copy link
Collaborator

Reported by: Be-ing
Date: 2017-12-28T02:53:04Z
Status: New
Importance: Wishlist
Launchpad Issue: lp1740335


The SDK for version 3 of the popular VST plugin format is available under the GNU GPL v3:
https://github.com/steinbergmedia/vst3sdk/blob/master/LICENSE.txt
Mixxx is currently licensed under the GNU GPL v2 or later, so as far as I understand (and IANAL), we could legally implement VST3 support if we distribute Mixxx as a whole under the GNU GPL v3. I think old code by itself would remain under the GPL v2 or later. Practically I don't think there would be any difference for us except maybe adding some clarification to the LICENSE file. We should consult with a lawyer before doing this to be clear, which is another good reason to join Software Freedom Conservancy.

Related: LV2 plugin support (Bug #⁠1530238)

@mixxxbot
Copy link
Collaborator Author

Commented by: Be-ing
Date: 2018-05-28T14:13:29Z


VST API documentation is available at https://github.com/steinbergmedia/vst3_doc . Inconveniently it is not hosted online anywhere as far as I can tell, so to read it you need to download that Git repository and view it locally. From a quick glance at the documentation, VST seems much more complex than LV2 and lilv.

@mixxxbot
Copy link
Collaborator Author

Commented by: daschuer
Date: 2018-05-28T15:09:32Z


Are there actually many VST3 plug-ins out there? VST2 and VST3 are not compatible.
Is there a killer plug-in, that Mixxx needs in VST2 or VST3?

@mixxxbot
Copy link
Collaborator Author

Commented by: Be-ing
Date: 2018-05-28T15:47:49Z


I'm not sure, but I think many VST plugins are distributed in both VST2 and VST3 versions.

I have removed this from the 2.3 milestone because I have no intention to work on this feature myself. If anyone else wants to commit to implementing this, please assign yourself to this issue and target it to a milestone.

@mixxxbot mixxxbot transferred this issue from another repository Aug 24, 2022
@fonsargo
Copy link
Contributor

fonsargo commented Jan 4, 2023

Hello!
I'm trying to use Mixxx for live broadcasting on the internet radio station and it's very powerful software for this.
But the really big problem is that it doesn't have any compression and AGC (Auto gain control) for decreasing audio amplitude. Because the same track can have very loud and very quiet parts, so built-in normalization can't compress it all to the same level.

It would be really useful if user could add an effect with VST plugin. For example, there is very good VST plugin for radio broadcasting called "Stereo Tool" from Thimeo (link). It already has compression, AGC and a lot of other things to make sound more clear and much louder, and to make it at the same level.

Here you can see the waveform of original audio from Mixxx (it's part of my live broadcasting):
original waveform
and the waveform of the same audio processed by Stereo Tool VST plugin:
with compression
so you can check the really big difference, especially in terms of radio broadcasting (people can listen to the radio in a car or in a kitchen, when they have a lot of noise and they just couldn't hear quiet parts of broadcasting).
As you can see, the quiet parts became louder, and very loud parts became more quiet. So all audio is almost at the same level now, which is really good.

@daschuer
Copy link
Member

@fonsargo this is the issue for a different feature.
Please file a new one for every feature you are missing in Mixxx or is it already covered by #6513
#6453
#5994

@fonsargo
Copy link
Contributor

@daschuer why is it different feature? I suggest not to implement 10+ features separately (like compresssor, limiter, AGC etc.), but implement only one feature instead: new effect for custom VST plugin. So every user of Mixx will be able to install any VST plugin he want and just select it in the Mixxx effects menu.

I'm not a painter, but I'll try to explain in pictures.
On the first step you select a new "VST plugin" effect in the effects menu:
Screenshot 2023-01-11 214346
On the second step you select any VST plugin installed on your computer:
Screenshot 2023-01-11 214427
On the third step turn it on and that's it.

@daschuer
Copy link
Member

We try to collect issues that describe missing features, in terms of use cases. If the VST integration fixes it, fine. But maybe a contributor comes along and adds the feature via another solution. That should also be fine. That's why a bug that describes your requirements is helpful.

@robbert-vdh
Copy link
Contributor

Only somewhat related, but I'd be interested in contributing CLAP plugin support at some point. The API's incredibly simple and robust, and the upcoming remote controls extension will make integration into something with limited space for controls like Mixxx a lot nicer when/if developers start supporting it. Won't get around to doing so anytime soon though.

@Swiftb0y
Copy link
Member

It would be nice to have Carla integrated (similar to zrythm), that way we'd get vst2/3, lv2, AU and possibly CLAP for free.

@fonsargo
Copy link
Contributor

fonsargo commented Jan 15, 2023

That's why a bug that describes your requirements is helpful.

Ok, I understand your point. I think for radio broadcasting it's important to have at least dual band or multi band compressor, limiter (or clipper), AGC, stereo expander and may be Bass EQ. At the same time any of this features alone seems useless for good audio processing.

I can create new issue for AGC feature for example and write some messages in existing issues about compressor and limiter, if it helps. But I still need this features together, not separately.

@fwcd fwcd added the effects label Oct 16, 2023
@mxmilkiib
Copy link
Contributor

"why is it different feature?"

Saying it because it has not already been explicetly stated: because you can already do the exact same thing you propose with an LV2 plugin.

This issue is just about allowing VST plugins in general in future just like one can with LV2 plugins these days, and the compressor (varient) request has already been made.

@fonsargo
Copy link
Contributor

fonsargo commented Oct 29, 2023

@mxmilkiib I haven't found any LV2 compressor plugin for Windows 10/11, so it seems to me that for now we can't do the exact same thing I propose with LV2 plugin on Windows. Do you know any solution?

@mxmilkiib
Copy link
Contributor

mxmilkiib commented Oct 29, 2023

@fonsargo Afaiu, the https://github.com/zrythm/ZPlugins suite for Zrythm DAW is multiplatform given the DAW is.

Radium DAW is multiplatform so afaiu https://github.com/kmatheussen/radium_compressor should be multiplatform, tbc.

http://xhip.net/effects has a compressor and limiter that apparently is Windows compatible

Edit: I guess any FAUST compressor/limiter .dsp can be built to provide a Windows LV2 bundle

@fonsargo
Copy link
Contributor

@mxmilkiib Thank you for information! However, I don't see any instructions to install ZPlugins on Windows. The same problem with Radium compressor. It seems like they don't have LV2 plugin for Windows.
I've also checked xhip effects, but it provides only vst plugins for Windows.
The only lv2 compressor plugin I've found for Windows is "x42 compressor". I installed it and, moreover, I managed to enable it in Mixxx, but unfortunately it doesn't work. I can't configure it properly, because I can't see any values (attack, threshold etc.). So I can only here some noise instead of music.

I also have no idea how to build .dsp plugins into LV2, could you provide some more details please?

@mxmilkiib
Copy link
Contributor

mxmilkiib commented Oct 29, 2023

@fonsargo you would have to use the command-line process to compile/build the plugins as noted in their READMEs, after installing [at least] meson, ninja, guile, etc. for ZPlugins.

I'm not sure of that process for Windows; Linux distros have packages which makes installing software super simple.

For FAUST: https://lac.linuxaudio.org/2013/download/graef_faust-lv2.pdf and https://z-uo.medium.com/make-lv2-plugins-with-faust-ce58601ab3b9 and https://faustlv2.bitbucket.io for more.

Edit2: I think I was mistaken about Xhip plugins being LV2.

@fonsargo
Copy link
Contributor

@mxmilkiib thank you! I've tried to compile some FAUST plugin to LV2 for Windows with faust online compiler, but unfortunately there isn't such option.
image
So I can't use LV2 for Windows, only VST and some other options. I've tried to compile it as LV2 for Linux, but in such case I get ".so" lib, which obviously doesn't work on Windows at all.

In my opinion it isn't so easy, as just compile linux sources for windows, because it just doesn't work this way. I also think, that most of the Windows users of Mixxx don't know how to "compile" anything at all :) Therefore I suggest adding VST support, because there are a lot of VST plugins for Windows, which can be easily installed.

@mxmilkiib
Copy link
Contributor

mxmilkiib commented Oct 31, 2023

Just to note here, as noted here, any FAUST .dsp can be built to LV2 on Windows by using the intermediate step of faust2juce.

@fonsargo
Copy link
Contributor

fonsargo commented Dec 19, 2023

@mxmilkiib, finally I've figured out how to convert FAUST .dsp to JUCE project and compile it to LV2 plugin for Windows, however, unfortunately, Mixxx can't load it because "This plugin has features which are not yet supported". I've tried it on 2.3.6 and 2.4-beta with the same result.
mixxx_2 3

@mxmilkiib
Copy link
Contributor

A-ha, interesting!

I wonder which LV2 feature the plugin is seeking from the host that Mixxx hasn't implemented yet. Does output when run from the terminal mention?

https://lv2plug.in/ns/

#10641

@fonsargo
Copy link
Contributor

fonsargo commented Dec 20, 2023

Actually I'm not sure that I understand how to run LV2 plugin from the terminal to see it's output.
I just took compressor plugin from faust online compiler https://faustide.grame.fr/ (Examples -> dynamic -> compressor.dsp), exported it to JUCE plugin and compiled it with Visual Studio 2019.
How can I check which LV2 feature this plugin use?

@ronso0
Copy link
Member

ronso0 commented Dec 20, 2023

@fonsargo May I ask which compressor plugin you're using that made you report #12451 ?

@fonsargo
Copy link
Contributor

fonsargo commented Dec 20, 2023

@ronso0 yes, of course. Because I couldn't manage to use any 3rd party plugins on Windows (LV2 or any other), I decided to implement built-in compressor effect myself. Here is the code:
https://github.com/fonsargo/mixxx/tree/compressor_effect
For now it works fine, but I'm still testing it, therefore I haven't created a pull request yet.

@ronso0
Copy link
Member

ronso0 commented Dec 20, 2023

Great, thanks. Looking forward for the PR

@mxmilkiib
Copy link
Contributor

mxmilkiib commented Dec 20, 2023

Actually I'm not sure that I understand how to run LV2 plugin from the terminal to see it's output.

Ah yes, you're a Windows user so maybe my suggestion or phrasing didn't make sense, but, on Linux at least, one can start a GUI application in the terminal and it will launch and open the UI and also print various debug and error messages to the terminal to let one know what is going on behind the scenes.

I'm not sure though if, when this is done with Mixxx, that, when that FAUST+JUCE-generated LV2 plugin is seen by Mixxx, that Mixxx will be verbose in the right way to output a line stating exactly what aspect of being an LV2 host Mixxx has not implemented yet that makes the ability to use that plugin fail. (*It wouldn't be too hard for me to check myself, but I'm on my phone!)

https://lv2plug.in/pages/host-compatibility.html

LV2 plugins each have their .ttl files which state what host features that plugin uses and requires of the host. The host will use this file when it finds what LV2 plugins are available, which is when Mixxx starts.

@ronso0
Copy link
Member

ronso0 commented Dec 20, 2023

I'm not sure though if, when this is done with Mixxx, that, when that FAUST+JUCE-generated LV2 plugin is seen by Mixxx, that Mixxx will be verbose in the right way to output a line stating exactly what aspect of being an LV2 host Mixxx has not implemented yet that makes the ability to use that plugin fail.

Nope, Mixxx will simply mark the plugin invalid as soon as special features are requested.

// We don't support any features
LilvNodes* features = lilv_plugin_get_required_features(m_pLV2plugin);
if (lilv_nodes_size(features) > 0) {
m_status = HAS_REQUIRED_FEATURES;
}

bool LV2Manifest::isValid() {
return m_status == AVAILABLE;
}

I briefly looked into printing debug messages per feature but didn't succeed, yet.
I think if that's doable it would need to be restricted to --developer mode because it may spam the log in case you have a large LV2 installed with many incompatible plugins .

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

8 participants