Commit Graph

617 Commits

Author SHA1 Message Date
Robbert van der Helm ee50044062 Also allow hiding the host for VST3 plugins 2021-04-27 18:50:47 +02:00
Robbert van der Helm 3a73fb9689 Allow hiding the DAW name for VST2 plugins
This can be useful when plugins have (broken) host-specific behaviour
that you want to avoid. I'll later add a list of host/plugin
combinations where this may be useful to the readme.
2021-04-27 18:41:36 +02:00
Robbert van der Helm 93df3fa1da Fix mismatching types in 2aadf52 #95
`wine_path` was a string, and `boost::process::search_path()` returns an
`boost::filesystem::path`. We should just be using paths here anyways.
2021-04-26 19:25:28 +02:00
Kira Bruneau 2aadf5256b Fix printing wine version with custom WINELOADER
- Don't call bp::search_path when using WINELOADER. It will return an
  empty string for an absolute path.

- To match the behaviour of the exe wrapper scripts, only print the
  wine version from WINELOADER if the path is executable.
2021-04-26 19:20:10 +02:00
Robbert van der Helm 68c846324c Also explicitly list simple dispatcher opcodes 2021-04-25 23:07:24 +02:00
Robbert van der Helm 0d1cb0bd77 Move special effVendorSpecific handling for REAPER
It's a bit less hacky if we do the effVendorSpecific check where we're
supposed to be checking for those things.
2021-04-24 20:23:23 +02:00
Robbert van der Helm 4937010557 Fix some of the clang-tidy lints 2021-04-14 16:09:54 +02:00
Robbert van der Helm a297866d45 Add way to use 32-bit VST3 when both are installed
Otherwise we would always use the 64-bit version and there would be no
way to use the 32-bit version, if version for some reason works better.

Relates to #80.
2021-04-13 19:28:36 +02:00
Robbert van der Helm f177b69aae Re-enable loading 32-bit VST3 plugins #80 2021-04-12 22:38:36 +02:00
Robbert van der Helm 653dcc6843 Fix linking with unity builds and VST3 SDK 3.7.2 2021-04-03 18:54:33 +02:00
Robbert van der Helm b036230067 Work around a regression in Wine 6.5
Killing a Wine process no longer terminates its threads, see the
changelog entry and NOTE for more information.
2021-03-27 17:41:15 +01:00
Robbert van der Helm 260aba393c Fix alignment in initialization message 2021-02-14 13:50:55 +01:00
Robbert van der Helm f07503b9b6 Print the matched config file section
To make it more obvious where settings are being set from.
2021-02-14 13:50:53 +01:00
Robbert van der Helm c9fbd0627f Rewrite the architecture document for VST3 support
This now also goes more in depth on the more interesting parts of
yabridge's implementation while skimming over lesser useful technical
bits.
2021-02-14 00:48:15 +01:00
Robbert van der Helm 4f8eaaaa75 Refactor plugin factories into Vst3*Proxy format
Now every proxy object that's directly created by the host or plugin
shares the same structure.
2021-02-13 15:42:05 +01:00
Robbert van der Helm 4e4ed3a6b4 Don't serialize input output info for IComponent::getRoutingInfo
Yes, input output info.
2021-02-12 19:24:33 +01:00
Robbert van der Helm 67091bc13c Don't serialize input info for IComponent::getBusInfo 2021-02-12 19:12:49 +01:00
Robbert van der Helm e62bd603f9 Don't serialize input arrangement for IAudioProcessor::getBusArrangement 2021-02-12 19:08:51 +01:00
Robbert van der Helm 2020acfec1 Don't serialize input info for IEditController::getParameterInfo 2021-02-12 19:02:27 +01:00
Robbert van der Helm 5978247a0b Don't serialize input size for IPlugView::GetSize 2021-02-12 18:58:33 +01:00
Robbert van der Helm 3e24610d81 Remove todo about moving find_vst_host
Given the other functions in this file that mostly deal with locating
files and modifying the environment it makes sense to also have this
here.
2021-02-12 18:43:31 +01:00
Robbert van der Helm a1bb522ea0 Move piping stream lines to the log to common 2021-02-12 18:35:07 +01:00
Robbert van der Helm dd0eb02970 Disable loading 32-bit VST3 plugins
There is some sort of memory corruption going on and these plugins
usually segfault on the audio thread. I'm clueless as to what could be
causing this (I wouldn't be surprised if this is caused by an
interaction between the VST3 SDK and Wine's Windows.h implementation),
but it's probably best to disable loading 32-bit VST3 plugins completely
until this has been fixed.
2021-02-11 13:55:44 +01:00
Robbert van der Helm cc5480a224 Fix loading 32-bit VST3 plugins
This is why GHC warns on shadowing by default. Probably.
2021-02-10 21:03:07 +01:00
Robbert van der Helm a91fad2217 Clean up interface checks in VST3 plugin factory
Even though the interface ID is passed as an FIDString and there is a
function to compare FIDStrings obviously doesn't mean that you're
supposed to use them! Duh.
2021-02-09 23:40:55 +01:00
Robbert van der Helm 10b01b5140 Update comments on the VST3 info caches 2021-02-09 23:19:17 +01:00
Robbert van der Helm 81d401f06a Add mutexes for the VST3 data caches
Since the restart will always be called from another thread, and when a
plugin asks for a restart during initialization this can quickly lead to
issues.
2021-01-30 23:26:57 +01:00
Robbert van der Helm b5dd806b2d Cache VST3 parameter information
This is in some cases needed to get decent performance in REAPER, as
REAPER seems to query this information (which cannot change without the
plugin requesting a restart) four times per second.
2021-01-30 22:24:05 +01:00
Robbert van der Helm 1043776e52 Differentiate between cached values in logs
If it turns out we forgot to flush this cache in some place.
2021-01-30 13:56:58 +01:00
Robbert van der Helm 68e10cd24c Flush the bus info cache in more places
The current approach 'works', but better err on the safe side. Once this
caching layer is no longer necessary we should just remove it.
2021-01-30 13:48:42 +01:00
Robbert van der Helm 0adca3e33c Revert "Remove cache_time_info and always cache time info"
This reverts commit cfb171c991.

No idea why, but this cache breaks SPL Transient Designer Plus. Perhaps
it overwrites the time info?
2021-01-30 02:37:27 +01:00
Robbert van der Helm 10b7930779 Also clear bus cache on IAudioProcessor::setActive
Now we need a workaround for our REAPER workaround because REAPER
doesn't follow the audio processing workflow diagram, amazing!
2021-01-30 01:42:20 +01:00
Robbert van der Helm 6339618984 Fix response logging filtering with bus info cache
The response logging wasn't getting filtered.
2021-01-30 00:45:45 +01:00
Robbert van der Helm cfb171c991 Remove cache_time_info and always cache time info
It sort of goes against yabridge's principles to not do these
unnecessary `audioMasterGetTime()` calls if the plugin does that, but it
also hurts the user experience to not have this as a default.
2021-01-30 00:20:35 +01:00
Robbert van der Helm f5b4a28bd0 Cache bus information during processing
This works around an issue with REAPER. During every processing cycle
REAPER would query how many input and output busses we have, and it
would then enumerate over all of those busses. This meant that if a VST3
plugin has 32 output busses, then REAPER will do 34 extra function calls
before processing audio.
2021-01-30 00:02:06 +01:00
Robbert van der Helm ffe46e225c Relay Wine STDIO with SCHED_OTHER
I haven't seen this cause issues myself, but it would not surprise me if
a plugin that produces a constant stream of FIXMEs would steal resources
from audio processing if the threads that are relaying those messages
are set to SCHED_FIFO.
2021-01-24 17:02:56 +01:00
Robbert van der Helm 77414c80d6 Allow null pointers in IEditController::setComponentHandler 2021-01-24 14:51:18 +01:00
Robbert van der Helm 0044bc6b60 Allow passing null pointers to IPlugView::setFrame 2021-01-24 14:44:42 +01:00
Robbert van der Helm d5e4424463 Also sync VST3 audio thread scheduling priorities
The exact same thing as the last commit, but for VST3 plugins.
2021-01-23 15:22:10 +01:00
Robbert van der Helm f03b9b1497 Sync VST2 audio thread scheduling priorities
We'll periodically copy the scheduling priorities from the host's audio
threads to the Wine plugin host's audio threads. The overhead of doing
this is about 1 microsecond on my system, so doing this every cycle
really adds up. But getting the Unix epoch time and comparing some
timestamps has a neglegible overhead, so this should give you the best
of both worlds.

Next we'll do the same thing for VST3 plugins.

As suggested by @jhernberg
2021-01-23 15:14:52 +01:00
Robbert van der Helm 96511ca8a3 Make realtime priority setting more granular
On the plugin side.
2021-01-23 14:43:06 +01:00
Robbert van der Helm 1b804bd5ea 💥 Convert between UID formats for class IDs
This is a breaking change. Old projects containing VST3 plugins running
through yabridge will no longer work without modifications. I'll write
some scripts to convert the class IDs stored in those project files soon
a migration path.

The UIDs reported by the plugin were apparently wrong, which meant that
the native Linux VST3 version of plugin X and the normal Windows VST3
version of plugin X used different class ideas than the Windows VST3
version of plugin X running through yabridge. Those things are supposed
to be compatible, so we sadly needed to make this change at some point.
2021-01-22 14:24:40 +01:00
Robbert van der Helm d3d57a3fe0 Use UID conversion for GetControllerClassId 2021-01-22 14:13:27 +01:00
Robbert van der Helm ae0d7263b8 Use UID conversion for IsPlugInterfaceSupported
I assume that this would also be necessary here, right?
2021-01-22 13:50:06 +01:00
Robbert van der Helm ac47865410 Readd accidentally removed forward declaration
This got removed in 74dc8225d1 when I
wanted to rework all `*Impl` classes the same way I did with
`YaPluginFactoryImpl`. This ended up not being possible, but
accidentally also removed this forward declaration. With unity builds
this did not cause issues however, but with regular builds it might
depending on which files are changed.
2021-01-21 13:26:01 +01:00
Robbert van der Helm 6f5a8e3ebf Update comments on get_plugin_factory()
Now that we do use a smart pointer to manage it ourselves, as proven
necessary by REAPER.
2021-01-21 02:05:21 +01:00
Robbert van der Helm 74dc8225d1 Back the VST3 plugin factory by an IPtr
This prevents REAPER from crashing when removing the last instance of a
plugin and then readding it. REAPER doesn't unload the module even after
it removes its last plugin factory instance. This means that before this
the plugin factory would be freed but we still had a seemingly valid
pointer to it that we would try to access.
2021-01-21 01:51:21 +01:00
Robbert van der Helm 4cc44c3cf7 Make the mutual recursion mechanism safer
By directly stopping the IO context there was a chance that a task would
get cancelled outright if all stars aligned in the wrong way. Stopping
the IO context could happen between posting the task to the context and
waiting for it. This approach is much safer as we cannot drop any work
this way.
2021-01-20 12:52:48 +01:00
Robbert van der Helm 5f7f44ce20 Fix potential issue in GUI thread mutual recursion
While the assumption that this is always the last element should hold
true, there may be exceptions so better be safe than sorry.
2021-01-20 03:29:25 +01:00
Robbert van der Helm 508d393bbc Fix event handlers not being unregistered
This would cause crashes in Bitwig, as `RunLoopTasks`' destructor would
not be run after the event handler has been unregistered, and we
unregister the event handler in that destructor.
2021-01-20 00:21:18 +01:00