Skip to content

3.0.0

Compare
Choose a tag to compare
@robbert-vdh robbert-vdh released this 14 Feb 13:52
· 1416 commits to master since this release

This release has been in the making for a long time, and we now finally have support for VST3 plugins! With this release yabridge now for the very first time lets you use Windows VST3 plugins as if they were native Linux VST3 plugins. Other than allowing you to now use plugins that do not have an accompanying VST2 version, these VST3 plugins also provide some new features that are not available to VST2 plugins while also having lower processing overhead. Aside from VST3 support this release includes a lot of responsiveness and performance improvements as well as a number of important bug fixes. You can read more about all of this in the full changelog below.

If you need any help setting up yabridge or if you just want to keep up to date with new releases, then feel free to join the Discord.

Added

  • Yabridge 3.0 introduces the first ever true Wine VST3 bridge, allowing you to use Windows VST3 plugins in Linux VST3 hosts with full VST 3.7.1 compatibility. Simply tell yabridgectl to look for plugins in $HOME/.wine/drive_c/Program Files/Common Files/VST3, run yabridgectl sync, and your VST3 compatible DAW will pick up the new plugins in ~/.vst3/yabridge automatically. Even though this feature has been tested extensively with a variety of VST3 plugins and hosts, there's still a substantial part of the VST 3.7.1 specification that isn't used by any of the hosts or plugins we could get our hands on, so please let me know if you run into any weird behaviour! There's a list in the readme with all of the tested hosts and their current VST3 compatibility status.
  • Added an option to use Wine's XEmbed implementation instead of yabridge's normal window embedding method. This can help reduce flickering when dragging the window around with certain window managers. Some plugins will have redrawing issues when using XEmbed or the editor might not show up at all, so your mileage may very much vary.
  • Added a compatibilty option to forcefully enable drag-and-drop support under REAPER. REAPER's FX window reports that it supports drag-and-drop itself, which makes it impossible to drag files onto a plugin editor embedded there. This option strips the drag-and-drop support from the FX window, thus allowing you to drag files onto plugin editors again.
  • Added a frame rate option to change the rate at which events are being handled. This usually also controls the refresh rate of a plugin's editor GUI. The default 60 updates per second may be too high if your computer's cannot keep up, or if you're using a host that never closes the editor such as Ardour.
  • Added a compatibility option to disable HiDPI scaling for VST3 plugins. At the moment Wine does not have proper fractional HiDPI support, so some plugins may not scale their interfaces correctly when the host tells those plugins to scale their GUIs. In some cases setting the font DPI in winecfg's graphics tab to 192 will also cause the GUIs to scale correctly at 200%.
  • Added the with-vst3 compile time option to control whether yabridge should be built with VST3 support. This is enabled by default.

Changed

  • libyabridge.so is now called libyabridge-vst2.so. If you're using yabridgectl then nothing changes here. To avoid any potential confusion in the future, please remove the old libyabridge.so file before upgrading.

  • The release archives uploaded on GitHub are now repackaged to include yabridgectl for your convenience.

  • Window closing is now deferred. This means that when closing the editor window, the host no longer has to wait for Wine to fully close the window. Most hosts already do something similar themselves, so this may not always make a difference in responsiveness.

  • Slightly increased responsiveness when resizing plugin GUIs by preventing unnecessary blitting. This also reduces flickering with plugins that don't do double buffering.

  • VST2 editor idle events are now handled slightly differently. This should result in even more responsive GUIs for VST2 plugins.

  • Win32 and X11 events in the Wine plugin host are now handled with lower scheduling priority than other tasks. This might help get rid of potential DSP latency spikes when having the editor open while the plugin is doing expensive GUI operations.

  • Opening and closing plugin editors is now also no longer done with realtime priority. This should get rid of any latency spikes during those operations, as this could otherwise steal resources away from the threads that are processing audio.

  • The way realtime priorities assigned has been overhauled:

    • Realtime scheduling on the plugin side is now a more granular. Instead of setting everything to use SCHED_FIFO, only the spawned threads will be configured to use realtime scheduling. This prevents changing the scheduling policy of your host's GUI thread if your host instantiates plugins from its GUI thread like REAPER does.
    • Relaying messages printed by the plugin and Wine is now done without realtime priority, as this could in theory cause issues with plugins that produce a steady stream of fixmes or other output.
    • The realtime scheduling priorities of all audio threads in the Wine plugin host are now periodically synchronized with those of the host's audio threads.
  • When using yabridge.toml config files, the matched section or glob pattern is now also printed next to the path to the file to make it a bit easier to see where settings are being set from.

  • The architecture document has been updated for the VST3 support and it has been rewritten to talk more about the more interesting bits of yabridge's implementation.

  • Part of the build process has been changed to account for this Wine bug. Building with Wine 5.7 and 5.8 required a change for yabridge-host.exe to continue working, but that change now also breaks builds using Wine 6.0 and up. The build process now detects which version of Wine is used to build with, and it will then apply the change conditionally based on that to be able to support building with both older and newer versions of Wine. This does mean that when you switch to an older Wine version, you might need to run meson setup build --reconfigure before rebuilding to make sure that these changes take effect.

  • yabridge-host.exe will no longer remove the socket directories if they're outside of a temporary directory. This could otherwise cause a very unpleasant surprise if someone were to pass random arguments to it when for instance trying to write a wrapper around yabridge-host.exe.

  • When YABRIDGE_DEBUG_LEVEL is set to 2 or higher and a plugin asks the host for the current position in the song, yabridge will now also print the current tempo to help debugging host bugs.

Fixed

  • VST2 plugin editor resizing in REAPER would not cause the FX window to be resized like it would in every other host. This has now been fixed.
  • The function for suspending and resuming audio, effMainsChanged(), is now always executed from the GUI thread. This fixes EZdrummer not producing any sound because the plugin makes the incorrect assumption that effMainsChanged() is always called from the GUI thread.
  • Event handling is now temporarily disabled while plugins are in a partially initialized state. The VST2 versions of T-RackS 5 would have a chance to hang indefinitely if the event loop was being run before those plugins were fully initialized because of a race condition within those plugins. This issue was only noticeable when using plugin groups.
  • Fixed a potential issue where an interaction between Bitwig Studio and yabridge's input focus grabbing method could cause delayed mouse events when clicking on a plugin's GUI in Bitwig. This issue has not been reported for yabridge 2.2.1 and below, but it could in theory also affect older versions of yabridge.

yabridgectl

  • Updated for the changes in yabridge 3.0. Yabridgectl now allows you to set up yabridge for VST3 plugins. Since libyabridge.so got renamed to libyabridge-vst2.so in this version, it's advised to carefully remove the old libyabridge.so and yabridgectl files before upgrading to avoid confusing situations.
  • Added the yabridgectl set --path-auto option to revert back to automatically locating yabridge's files after manually setting a path with yabridgectl set --path=<...>.
  • Added the yabridgectl set --no-verify={true,false} option to permanently disable post-installation setup checks. You can still directly pass the --no-verify argument to yabridgectl sync to disable these checks for only a single invocation.

Compatibility

The archive ending in -ubuntu-18.04.tar.gz is a compatibility release meant for older distros and is thus slightly larger in size. If you're using Ubuntu 18.04, Linux Mint 19, debian 10, or any other distro that's older than Ubuntu 20.04, then you should use this archive instead of the regular release. Yabridgectl will run on any distro.

Updating

To update from an older installation, simply overwrite your current yabridge and yabridgectl files with the ones downloaded below, and then rerun yabridgectl sync to complete the update. As of yabridge 3.0.0 yabridgectl is now included in the regular release archives for your convenience.