diff --git a/CHANGELOG.md b/CHANGELOG.md index 2623cdd3..1dd0e6ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,18 +14,19 @@ Versioning](https://semver.org/spec/v2.0.0.html). information and process level before sending the audio buffers over to the Windows VST2 plugin. This lets us cache this information on the Wine side during the audio processing call, which significantly reduces the overhead of - bridging VST2 plugins by avoiding one or more otherwise mandatory back and - forth function call between yabridge's native plugin and the Wine plugin host. - This considerably reduces the overhead of bridging _MeldaProduction_ VST2 - plugins, and it has an even greater impact on plugins like _SWAM Cello_ that - request this information repeatedly over the course of a single audio - processing cycle. Previously yabridge had a `cache_time_info` compatibility - option to mitigate the performance hit for those plugins, but this new caching - behaviour supercedes that. + bridging VST2 plugins by avoiding one or more otherwise unavoidable back and + forth function calls between yabridge's native plugin and the Wine plugin + host. While beneficial to every VST2 plugin, this considerably reduces the + overhead of bridging _MeldaProduction_ VST2 plugins, and it has an even + greater impact on plugins like _SWAM Cello_ that request this information + repeatedly over the course of a single audio processing cycle. Previously + yabridge had a `cache_time_info` compatibility option to mitigate the + performance hit for those plugins, but this new caching behaviour supercedes + that option. - We now always force the CPU's flush-to-zero flag to be set when processing audio. Most plugins will already do this by themselves, but plugins like _Kush Audio REDDI_ and _Expressive E Noisy_ that don't will otherwise suffer from - extreme DSP usage when processing almost silent audio. + extreme DSP usage increases when processing almost silent audio. - Added a new [compatibility option](https://github.com/robbert-vdh/yabridge#compatibility-options) to hide the name of the DAW you're using. This can be useful with plugins that have @@ -33,24 +34,25 @@ Versioning](https://semver.org/spec/v2.0.0.html). issues](https://github.com/robbert-vdh/yabridge#runtime-dependencies-and-known-issues) section of the readme for more information on when this may be useful. - Yabridge now uses a watchdog timer to prevent rare instances where Wine - processes would be left running after the native host has crashed or got - forcefully terminated. By design yabridge would always try to gracefully shut - down its Wine processes when native host has crashed and the sockets become - unavailable, but this did not always happen if the crash occurred before the - bridged plugin has finished initializing because of the way Unix Domain - Sockets work. In that specific situation the `yabridge-host.exe` process would - be left running indefinitely, and depending on your DAW that might have also - prevented you from restarting your DAW. To prevent any more dangling - processes, yabridge's Wine plugin hosts now have a watchdog timer that - periodically checks whether the original process that spawned the bridges is - still running. If it detects that the process is no longer alive, yabridge - will close the sockets and shut down the bridged plugin to prevent any more - dangling processes from sticking around. + processes would be left running after the native host has crashed or when it + got forcefully terminated. By design yabridge would always try to gracefully + shut down its Wine processes when native host has crashed and the sockets + become unavailable, but this did not always happen if the crash occurred + before the bridged plugin has finished initializing because of the way Unix + Domain Sockets work. In that specific situation the `yabridge-host.exe` + process would be left running indefinitely, and depending on your DAW that + might have also prevented you from actually restarting your DAW without + running `wineserver -k` first. To prevent any more dangling processes, + yabridge's Wine plugin hosts now have a watchdog timer that periodically + checks whether the original process that spawned the bridges is still running. + If it detects that the process is no longer alive, yabridge will close the + sockets and shut down the bridged plugin to prevent any more dangling + processes from sticking around. ### Changed - Most common VST2 functions that don't have any arguments are now handled - explicilty. Yabridge can automatically support most common VST2 functions by + explicilty. Yabridge could always automatically support most VST2 functions by simply inspecting the function arguments and handling those accordingly. This works practically everywhere, but _Plugsound Free_ by UVI would sometimes pass unreadable function arguments to functions that weren't supposed to have any @@ -58,13 +60,13 @@ Versioning](https://semver.org/spec/v2.0.0.html). should prevent similar situations from happening in the future. - Yabridge will now try to bypass VST3 connection proxies if possible. Instead of connecting two VST3 plugin objects directly, **Ardour** and **Mixbus** - place a connection proxy between the two objects so they can only interact - through the DAW. In the past yabridge has always honored this by proxying the - host's connection proxy, but this causes difficult situations with plugins - that actively communicate over these proxies from the GUI thread, like the - _FabFilter_ plugins. Instead of trying to proxy these proxies, yabridge will - now try to bypass the proxies and connect the objects directly instead, only - falling back to proxying the proxy when that's not possible. + place a connection proxy between the two plugin objects so that they can only + interact indirectly through the DAW. In the past yabridge has always honored + this by proxying the host's connection proxy, but this causes difficult + situations with plugins that actively communicate over these proxies from the + GUI thread, like the _FabFilter_ plugins. Whenever possible, yabridge will now + try to bypass the connection proxies and connect the two objects directly + instead, only falling back to proxying the proxies when that's not possible. - Compile times have been slightly lowered by compiling most of the Wine plugin host into static libraries first. - When building the package from source, the targetted Wine version now gets @@ -82,22 +84,23 @@ Versioning](https://semver.org/spec/v2.0.0.html). ### Fixed - Fixed rare X11 errors that could occur when closing a plugin's editor. In - certain rare circumstances, closing a plugin editor would trigger an X11 error - and crash the Wine plugin host, and with that likely the entire DAW. This - happened because Wine would try to destroy the window after it had already - been destroyed. This could happen in Renoise and to a lesser degree in REAPER - with plugins that take a while to close their editors, such as the _iZotope - Rx_ plugins. We now explicitly reparent the window to back the root window - first before deferring the window closing. This should fix the issue, while - still keeping editor closing nice and snappy. + certain circumstances, closing a plugin editor would trigger an X11 error and + crash the Wine plugin host, and with that likely the entire DAW. This happened + because Wine would try to destroy the window after it had already been + destroyed. This could happen in Renoise and to a lesser degree in REAPER with + plugins that take a while to close their editors, such as the _iZotope Rx_ + plugins. We now explicitly reparent the window to back the root window first + before deferring the window closing. This should fix the issue, while still + keeping editor closing nice and snappy. - Plugin group host processes now shut down by themselves if they don't get a - request to host any plugins. This can happen when the DAW gets killed after - starting the group host process but before the native yabridge plugins - requests the group host process to host a plugin. Otherwise this would result - in a `yabridge-group.exe` process hanging around indefinitely. -- Fixed latency introducing plugins VST3 from causing **Ardour** and **Mixbus** - to freeze when loading the plugin. This stops _Neural DSP Darkglass_ from - freezing when used under those DAWs. + request to host any plugins within five seconds. This can happen when the DAW + gets killed right after starting the group host process but before the native + yabridge plugin requests the group host process to host a plugin for them. + Before this change, this would result in a `yabridge-group.exe` process + staying around indefinitely. +- Prevented latency introducing VST3 from freezing **Ardour** and **Mixbus** + when loading the plugin. This stops _Neural DSP Darkglass_ from freezing when + used under those DAWs. - Fixed _FabFilter_ VST3 plugins freezing in **Ardour** and **Mixbus** when trying to duplicate existing instances of the plugin after the editor GUI has been opened. @@ -106,18 +109,21 @@ Versioning](https://semver.org/spec/v2.0.0.html). - Fixed _Voxengo_ VST3 plugins freezing in **Ardour** and **Mixbus** when loading a project or when duplicating the plugin instances. - Fixed potential X11 errors resulting in assertion failures and crashes in - **Ardour** and **Mixbus** caused by those hosts hiding a plugin's editor + **Ardour** and **Mixbus** when those hosts hide (unmap) a plugin's editor window. -- Fixed saving and loading _iZotope Rx7_ plugin state in **Bitwig Studio**. +- Fixed saving and loading plugin state for VST3 _iZotope Rx_ plugins in + **Bitwig Studio**. - Fixed a regression from yabridge 3.1.0 where **REAPER** would freeze when opening a VST3 plugin context menu. -- Fixed another potential freezing issue in **REAPER** that could happen when - the plugin resizes itself while sending a parameter change to the host and the - 'disable saving full plug-in state' option has not been disabled. -- Fixed potential freeze when loading a VST3 while the editor is open when the - plugin tries to resize the open editor window based on that preset. -- Fixed a potential assertion failure when setting VST3 preset data. This would - depend on the `libstdc++` version used to built yabridge with. +- Fixed a potential freezing issue in **REAPER** that could happen when a VST3 + plugin resizes itself while sending parameter changes to the host when + REAPER's 'disable saving full plug-in state' option has not been disabled. +- Fixed another potential freeze when loading a VST3 plugin preset while the + editor is open when the plugin tries to resize itself based on that new + preset. +- Fixed a potential assertion failure when loading VST3 presets. This would + depend on the compiler settings and the version of `libstdc++` used to built + yabridge with. - Fixed _PSPaudioware InifniStrip_ failing to initialize. The plugin expects the host to always be using Microsoft COM, and it doesn't try to initialize it by itself. InfiniStrip loads as expected now. @@ -126,14 +132,14 @@ Versioning](https://semver.org/spec/v2.0.0.html). to be. - Fixed extreme DSP usage increases in _Kush Audio REDDI_ and _Expressive E Noisy_ due to denormals. -- Fixed the VST3 version of _W. A. Production ImPerfect_ from crashing during - audio setup. +- Fixed the VST3 version of _W. A. Production ImPerfect_ crashing during audio + setup. - Fixed _UVI Plugsound Free_ crashing during initialization. - Fixed the Wine version detection when using a custom `WINELOADER`. - Fixed incorrect logging output for cached VST3 function calls. -- Because of the new transport information prefetching, the excessive DSP usage - in _SWAM Cello_ is now been fixed without requiring any manual compatibility - options. +- Because of the new VST2 transport information prefetching, the excessive DSP + usage in _SWAM Cello_ has now been fixed without requiring any manual + compatibility options. ## [3.1.0] - 2021-04-15