mixxxdj / mixxx

Mixxx is Free DJ software that gives you everything you need to perform live mixes.
http://mixxx.org
Other
4.53k stars 1.28k forks source link

VST effect plugins #9019

Open mixxxbot opened 2 years ago

mixxxbot commented 2 years ago

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 commented 2 years ago

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 commented 2 years ago

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 commented 2 years ago

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.

fonsargo commented 1 year ago

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 commented 1 year ago

@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 https://github.com/mixxxdj/mixxx/issues/6513 https://github.com/mixxxdj/mixxx/issues/6453 https://github.com/mixxxdj/mixxx/issues/5994

fonsargo commented 1 year ago

@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 commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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.

mxmilkiib commented 1 year ago

"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 commented 1 year ago

@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 commented 1 year ago

@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 commented 1 year ago

@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 commented 1 year ago

@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 commented 1 year ago

@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 commented 1 year ago

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 commented 11 months ago

@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 commented 11 months ago

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 commented 11 months ago

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 commented 11 months ago

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

fonsargo commented 11 months ago

@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 commented 11 months ago

Great, thanks. Looking forward for the PR

mxmilkiib commented 11 months ago

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 commented 11 months ago

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. https://github.com/mixxxdj/mixxx/blob/4a91ff374c8887d45aa99b39192c83e0fc4aa531/src/effects/backends/lv2/lv2manifest.cpp#L183-L187 https://github.com/mixxxdj/mixxx/blob/4a91ff374c8887d45aa99b39192c83e0fc4aa531/src/effects/backends/lv2/lv2manifest.cpp#L207-L209 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 .