github robbert-vdh/yabridge 3.4.0

latest releases: 5.1.1, 5.1.0, 5.0.5...
4 years ago

I'm very excited to finally be able to share this new yabridge release with all of you! In terms of changes this has been the largest update since yabridge 3.0.0. Usability improvements were the main focus of this update, but this release also includes another round of optimizations to reduce yabridge's DSP load overhead even further. The most important change there is that the audio processing implementation has been completely rewritten to use a hybrid approach of a shared memory audio buffer combined with yabridge's usual socket-based message passing. This reduces the amount of additional work needed to process a buffer of audio significantly while still maintaining all of the benefits of yabridge's flexible communication design.

On the usability front, the main standout feature here is support for drag-and-drop from a Windows plugin running under yabridge to a native application, such as your DAW. This is the first time that this has been possible under Wine, and it should make using plugins that can generate audio or MIDI much more enjoyable. Another improvement worth mentioning is that yabridge will now actively prevent plugins from hiding the mouse cursor in incorrect ways. This prevents the cursor from permanently disappearing at random when using JUCE based plugins without breaking any functionality where the mouse cursor is supposed to be hidden, like when dragging knobs.

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

Added

  • Added support for drag-and-drop from Windows plugins running under yabridge to native applications, such as your DAW. This makes it much more convenient to use plugins like Scaler 2 that generate audio or MIDI files. Because of the way this is implemented this feature will work with any Wine version.
  • When a plugin fails to load or when the Wine plugin host process fails to start, yabridge will now show you the error in a desktop notification instead of only printing it to the logger. This will make it much faster to quickly diagnose issues if you weren't already running your DAW from a terminal. These notifications require libnotify and its notify-send application to be installed.
  • Similarly, yabridge will show you a warning and a desktop notification with a reminder to rerun yabridgctl sync when it detects that there's been a version mismatch between the plugin and the used Wine plugin host application.
  • Added support for building 32-bit versions of the yabridge libraries, allowing you to use both 32-bit and 64-bit Windows VST2 and VST3 plugins under 32-bit Linux plugin hosts. This should not be needed in any normal situation since Desktop Linux has been 64-bit only for a while now, but it could be useful in some very specific situations. Building on an actual 32-bit system will also work, in which case the 64-bit Wine plugin host applications simply won't be built.
  • Added the deprecated pre-VST2.4 main entry point for VST2 plugins. This allows the above mentioned 32-bit version of yabridge to be used in EnergyXT, allowing you to use both 32-bit and 64-bit Windows VST2 plugins there.
  • Added an environment variable to disable the watchdog timer. This is only needed when running the Wine process under a separate namespace. If you don't know that you need this, then you probably don't need this!

Changed

  • The audio processing implementation for both VST2 and VST3 plugins has been completely rewritten to use both shared memory and message passing to cut down the number of expensive memory copies to a minimum. This reduces the DSP load overhead of audio processing even further.
  • Respect $XDG_DATA_HOME as a fallback when looking for yabridge's plugin host binaries instead of hardcoding this to ~/.local/share/yabridge. This matches the existing behaviour in yabridgectl.
  • Optimized the management of VST3 plugin instances to reduce the overhead when using many instances of a single VST3 plugin.
  • Slightly optimized the function call dispatch for VST2 plugins.
  • Prevented some more potential unnecessary memory operations during yabridge's communication. The underlying serialization library was recreating some objects even when this wasn't needed, which could result in unnecessary memory allocations under certain circumstances. This is related to the similar issue that was fixed in yabridge 3.3.0. A fix for this issue has also been upstreamed to the library.

Fixed

  • Fixed mouse cursors disappearing when interacting with some plugin GUIs. This often happened with JUCE based plugins, such as Sonic Academy's Kick 2 and Anaglyph. While this is technically a workaround for a bad interaction between JUCE and Wine, it should make these plugins much more pleasant to use.
  • Fixed Waves VST3 plugins not being able to initialize correctly. These plugins would at runtime change their query interface to support more VST3 interfaces, including the mandatory edit controller interface. Yabridge now requeries the supported interfaces at a later stage to work around this.
  • Fixed VST2 plugins in Ardour not receiving all transport information, breaking host sync and LFOs in certain plugins. This was a regression from yabridge 3.2.0.
  • Fixed input focus handling being broken REAPER after reopning a closed FX window. Now moving the mouse cursor outside of the plugin's GUI will always release input focus, even after closing the window.
  • Fixed Insert Piz Here's midiLooper crashing in REAPER when the plugin tries to use REAPER's host function API. This currently isn't supported by yabridge. We now explicitly ignore these requests.
  • Worked around a rare thread safety issue in MeldaProduction VST3 plugins where the plugin would deadlock when the host asks for the editor's size while plugin is also being initialized form the audio thread at the same time.
  • Fixed JUCE VST3 plugins like Tokyo Dawn Records' SlickEQ M causing the host to freeze when they send a parameter change from the audio thread using the wrong VST3 API while the plugin is also trying to resize the window from the GUI thread at the same time. This would happen in SlickEQ M when reopning the Smart Ops panel after having used it once. To fix this, yabridge's Wine-side VST3 mutual recursion mechanism now only operates when invoked from the GUI thread.
  • Fixed yabridge's logging seeking the STDERR stream to position 0 every time it writes a log message. This would be noticeable when piping the host's STDERR stream to a file and YABRIDGE_DEBUG_LEVEL wasn't set.
  • When printing the Wine version during initialization, the Wine process used for this is now run under the same environment that the Wine plugin host process will be run under. This means that if you use a custom WINELOADER script to use different Wine versions depending on the prefix, the wine version: line in the initialization message will now always match the version of Wine the plugin is going to be run under.
  • Fixed the plugin-side watchdog timer that allows a yabridge plugin to terminate when the Wine plugin host application fails to start treating zombie processes as still running, active processes. This could cause plugins to hang during scanning if the Wine process crashed in a very specific and likely impossible way.
  • If a VST3 plugin returns a null pointer from IEditController::createView(), then this will now be propagated correctly on the plugin side.
  • Fixed VST2 speaker arrangement configurations returned by the plugin not being serialized correctly. Very few plugins and hosts seem to actually use these, so it should not have caused any issues.

yabridgectl

  • Added support for setting up merged VST3 bundles when using a 32-bit version of libyabridge-vst3.so.
  • Fixed the post-installation setup checks when the default Wine prefix over at ~/.wine was created with WINEARCH=win32 set. This would otherwise result in an 00cc:err:process:exec_process error when running yabridgectl sync because yabridgectl would try to run the 64-bit yabridge-host.exe in that prefix. Yabridgectl now detects the architecture of the default prefix first and then runs the proper Wine plugin host application for that prefix.
  • Copies of libyabridge-vst2.so and libyabridge-vst3.so are now reflinked when supported by the file system. This speeds up the file coyping process while also reducing the amount of disk space used for yabridge when using Btrfs or XFS.
  • If pruning causes a directory to be empty, then the empty directory will now also be removed. This avoids having your plugin directories littered with empty directories.
  • Fixed incorrect new and total plugin counts. These counts are now always correct, even when using multiple versions of the same VST3 plugin or when multiple plugin directories overlap because of the use of symlinks.
  • Aside from pruning only unmanaged VST3 bundles in ~/.vst3/yabridge, yabridge will now also prompt you to prune leftover files from within a managed VST3 bundle. This makes it easy to switch from the 64-bit version of a plugin to the 32-bit version, or from a 64-bit version of yabridge to the 32-bit version. I don't know why you would want to do either of those things, but now you can!
  • Yabridgectl now prints a more descriptive error message instead of panicing if running $WINELOADER --version during yabridgectl's post-setup verification checks does not result in any output. This is only relevant when using a custom WINELOADER script that modifies Wine's output.

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, AV Linux MXE 2021, 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.

Don't miss a new yabridge release

NewReleases is sending notifications on new releases.