pongasoft / jamba

A lightweight VST2/3 framework
https://jamba.dev/
Apache License 2.0
122 stars 3 forks source link

Support Linux #8

Open c0m0r1 opened 4 years ago

c0m0r1 commented 4 years ago

I am currently trying to develop a VST plugin in a linux environment. Since jamba didn't support Linux, so I tried modifying the Mac version, but it was too painful for me. Are there plans to release the Linux version of jamba?

ypujante commented 4 years ago

Since Jamba was released, you are the first person ever asking for it. I am definitely open to add support for it, if there is demand. I will leave this ticket open and interested people can vote for it.

c0m0r1 commented 4 years ago

I tried to build a sample VST2 plugin that can be rendered with MrsWatson by referring to the sdk provided by steinberg and https://github.com/pongasoft/vst3-again-sample, but in both cases it failed to render with MrsWatson. (validator shows that the build result is the correct VST3 plugin, but MrsWatson rejected it). I thought there was a problem with VST2 support, and that's it. Can I successfully build a plugin without waiting for the jamba linux version?

ypujante commented 4 years ago

I have not tried building any plugin with Linux with any version of the VST3 SDK so I cannot say whether it works or not. The vst3-again-sample project was done prior to Jamba so it doesn't use Jamba but I have not tried to build it under Linux (tested only on macOS). You can always try to post a question on the official VST forum (https://sdk.steinberg.net/)

mxa commented 3 years ago

Developing a VST3 with the vstgui from Steinberg on Linux and it works well so far. Trying to understand which advantages Jamba would add to my workflow except adding another layer of dependency.

ypujante commented 3 years ago

@mxa You can check the https://jamba.dev/ to see the features that Jamba adds on top of the bare VST3 SDK.

KottV commented 2 years ago

Hi,

I build vst-sam-spl-64 without much hassle. But for Linux support some updates are needed in the Jamba:

/tmp/vst3sdk-v3.7.5_build_44/base/source/timer.cpp:366: static Steinberg::Timer* Steinberg::Timer::create(Steinberg::ITimerCallback*, Steinberg::uint32): Assertion `false && "DEPRECATED No Linux implementation"' failed.

KottV commented 2 years ago

Ok, commenting that assert in vst3sdk/base/source/timer.cpp helped:

изображение

this is in the Carla plugin host

ypujante commented 2 years ago

I am surprised that it even works on Linux. Every time there is a new VST3 sdk, I spent time fixing things on macOS and when it works there are always broken things on the Windows side as well. Since I don't even check Linux I am surprised it seems to work. The issue you mention with timer.cpp is a file in the VST3 sdk not in Jamba.

KottV commented 2 years ago

Yeah, it's a VST3 thing (Jamba - was my first thought, because I've never seen that error before with VST3 plugins in Linux). Actually, you just have to allow Linux in Jamba's cmake files. I can do a PR for that.

magnetophon commented 1 year ago

Since Jamba was released, you are the first person ever asking for it. I am definitely open to add support for it, if there is demand. I will leave this ticket open and interested people can vote for it.

It's got my vote!

ypujante commented 1 year ago

Status update:

I have spent about 2 days trying to port jamba to Linux and I must admit it is getting to the point where I am running into serious issues:

  1. as pointed out by @KottV, the first problem is that creating timers for Linux is just not supported (I opened a discussion thread in the VST forums). Jamba is using timers so that RT can send messages to the UI in a thread safe manner (although I realize that this specific answer seems to indicate that it is not guaranteed...). So I may have to revisit the whole thread safety/timer issue. That being said, even if I remove the usage of timers in RT for thread safety, timers in the UI (for example DebugParam view) should just work...

  2. Crash of DAW with undefined symbol: pango_font_metrics_get_height (although I can run the editor fine)

  3. Invalid module message in DAW due to naming issue of .so (creating a link with a different name fixes the issue but why)

Steinberg does not have a VSTPluginTestHost for Linux like there is on other platforms so it is hard to test that the plugin actually works. I have been using Ardour demo to test, which is where I saw those crashes. Unclear if the issues are due to improper implementation in Ardour (see 3), or my fault, or the SDK's fault.

The editorhost application does not seem to provide the IRunLoop implementation on Linux (which I believe is the replacement for Timers on Linux).

So in conclusion, not great...

ypujante commented 1 year ago

Status update:

After more research this where I am now:

  1. After many attempts at getting help on the Steinberg forums on Linux, I am still waiting for anybody to chime in, including any Steinberg representative...
  2. Still having issue with undefined symbol: pango_font_metrics_get_height with Ardour
  3. Using Bitwig, I am not getting this error, but running into many other issues
  4. After implementing my own timer thread, I am able to open the plugin but many things are broken:
  5. Opening a file dialog (which is part of VSTGUI) hangs everything and can only select with the keyboard (mouse unresponsive)
  6. Drag'n'Drop not working
  7. During compilation, there are many: "warning TODO: Implementation" messages.

It seems very clear to me that despite the claims that the SDK supports Linux, it is very rough and not really supported (point 1, point 4 - 7)...

I am throwing the towel for now...

KottV commented 1 year ago

Yeah... not much optimistic. As far as I know, most of Devs implements their own GUI or uses some 3rd party instead of vstgui on Linux.

ypujante commented 12 months ago

With the release of SDK 3.7.9, there is a new feature which may help in supporting Linux.

I will try it when I get a chance but not holding my breath as there were many other issues uncovered during my prior attempt(s) at porting to Linux...