osxmidi / LinVst

Linux Windows vst wrapper/bridge
GNU General Public License v3.0
682 stars 41 forks source link

Low Framerate in all plugins #82

Closed ghost closed 5 years ago

ghost commented 5 years ago

With any plugin I try, the frame rate of the GUI is significantly lower than what it should be. The same plugins running in Airwave feel butter smooth, so it's strange that more modern code is performing worse for me.

I posted an issue like this before, and it wasn't resolved. My solution then was to just use airwave for my plugins, but now airwave with the new version of Bitwig causes Kontakt to crash (which is the most important plugin for me.)

It would be nice if I could get LinVst working better. It's a lot more stable in my experience. I've tried looking through the code, but it's hard to follow and I don't know where to look to see if I can possibly fix it. Is there any code in LinVst that handles GUI updates or rendering? Or is that handled in different libraries?

I'm using an AMD R9 285 graphics card. I've tried it with many different Linux distros and LinVst still behaved the same. I also tried removing the graphics card and running the built-in Intel graphics, but it still behaved the same, so I don't think it's specifically an AMD issue.

osxmidi commented 5 years ago

I'm not sure what's going on and I've never heard about similar problems from other uses.

All I can suggest is to try the XEMBED makefiles in the Xembed folder (copy/overwrite the Makefile-XEMBED-64 (or 6432 for 64bit and 32bit support) to the Makefile in the main folder and then make) as it uses the same XEMBED display routines as Airwave uses and it seems to be ok with Bitwig (and maybe others) but it's not that compatible with Reaper.

The XEMBED version has a differently named lin-vst-server and so any plugin that uses the XEMBED linvst.so won't conflict with any other plugins using the usual linvst.so.

ghost commented 5 years ago

The XEMBED makefiles did not help any. It actually made things worse, because Kontakt wouldn't load the graphics for instrument libraries.

I found that Kontakt running with Carla works smoothly. However Carla doesn't expose the parameters to Bitwig so there's no way to do any automation, so it's still not a viable solution.

It is strange that I'm the only one experiencing this issue. I've also been having issues with graphics not being that smooth in other Linux applications too. There seems to be something about my computer that doesn't want to behave smoothly with Linux, but I can't narrow it down to what.

KottV commented 5 years ago

Are both wineprefixes identical in Airwave and LinVst? Overriding DirectDraw dlls (d2d1.dll) may have such effect.

ghost commented 5 years ago

I only have the default wine prefix installed. I also don't have d2d1.dll overridden.

I also found there is kind of a way to do automation with Carla. I can add an automation clip in Bitwig to control an individual midi cc number that a parameter inside Kontakt is mapped to. It still isn't the greatest workflow, though.

KottV commented 5 years ago

That's really strange. Rendering is done by Wine. LinVst, Airwave, Carla just wrapes dll and expose vst parameters (correct me if it's wrong). Do you build program by self or use binaries?

ghost commented 5 years ago

I'm using wine staging from the repository found at winehq.org. I've tried both the binary version of LinVst and building it myself. I'm using the latest binary version of Airwave from https://github.com/psycha0s/airwave/releases.

ghost commented 5 years ago

Maybe it's not really a graphics issue. Bitwig lets you control parameters of a plugin on the device panel when the plugin's GUI is closed. When you move a knob around quickly, it draws a blue line around the knob representing the lag between moving the knob and the plugin registering the update.

For me when I run a plugin in LinVst, the blue line shows it's lagging quite a bit and is very choppy, even when the plugin's GUI is closed. Maybe the plugin isn't updating quickly enough or something.

KottV commented 5 years ago

Maybe.

I would run plugin from terminal in some simple vst host (carla-single or JUCE's AudioPLuginHost) to watch it's output. Or even with strace.

ghost commented 5 years ago

This is Bitwig's log output when I tried a few plugins with LinVst and the same plugins in Airwave. They both seem pretty similar, so I'm not sure what information we can get from this. No errors showed up inside the terminal when I ran Bitwig and Carla from the terminal. There was nothing in Carla's log output that wasn't also in Bitwig's log. I don't know how to get JUCE's AudioPluginHost installed.

LinVst: [Fri Apr 26 14:31:05 CDT 2019] Starting audio engine. Detected instruction set: AVX Registering modules... Connecting to server :1234 Loading audio system ... Opening audio device ... Connecting to active project ... Successfully set thread realtime priority to 20 Successfully set thread realtime priority to 19 Successfully set thread realtime priority to 19 Successfully set thread realtime priority to 19 Successfully set thread realtime priority to 19 Successfully set thread realtime priority to 19 Successfully set thread realtime priority to 19 Successfully set thread realtime priority to 19 Successfully set thread realtime priority to 19 LLVM CPU: haswellNitro JIT took: 37ms, total JIT: 37ms [white_noise] Nitro JIT took: 51ms, total JIT: 88ms [blender] Nitro JIT took: 85ms, total JIT: 173ms [voice_stack_spread] Nitro JIT took: 129ms, total JIT: 302ms [VCF_VCA] Nitro JIT took: 186ms, total JIT: 488ms [triggo] About to start the following process: /opt/bitwig-studio/bin/BitwigPluginHost64 host Vladislav Goncharov-Limiter No6-1 44100 512 20581-1 8 not-dpi-aware Creating plugin audio thread proxy 0 PluginHost: Starting new audio thread for processing plugin 0 Successfully set thread realtime priority to 19 DSSI VST plugin server v0.986 Copyright (c) 2012-2013 Filipe Coelho Copyright (c) 2010-2011 Kristian Amlie Copyright (c) 2004-2006 Chris Cannam LinVst version 2.5 Loading /home/billm/.wine/drive_c/Program Files/VstPlugins/Limiter6-x64.dll 002a:fixme:heap:RtlSetHeapInformation 0x240000 0 0x23df70 4 stub PluginHost: Plugin needs to restart processing during initialization Applying plugin IO state Applying plugin instance state Plugin wants different window size after attaching: 678, 430 Sending a shutdown request to the plugin host PluginHost: Destroying plugin with id 1 Waiting for plugin host process to exit dssi-vst-server[1]: exiting PluginHost: Shutting down... PluginHost: Shutting down request reader thread PluginHost: Request reader thread finished PluginHost: Shutting down audio threads PluginHost: Exiting due to shutdown PluginHost: exiting with code 0 Plugin host process exited with code: 0 Waiting for plugin host process to exit Plugin host process exited with code: 0 About to start the following process: /opt/bitwig-studio/bin/BitwigPluginHost64 host Tokyo Dawn Labs-TDR Nova-2 44100 512 20581-2 8 not-dpi-aware Creating plugin audio thread proxy 0 PluginHost: Starting new audio thread for processing plugin 0 Successfully set thread realtime priority to 19 DSSI VST plugin server v0.986 Copyright (c) 2012-2013 Filipe Coelho Copyright (c) 2010-2011 Kristian Amlie Copyright (c) 2004-2006 Chris Cannam LinVst version 2.5 Loading /home/billm/.wine/drive_c/Program Files/VstPlugins/TDR Nova.dll PluginHost: Plugin needs to restart processing during initialization Applying plugin IO state Applying plugin instance state 003b:fixme:ver:GetCurrentPackageId (0xd0fdc0 (nil)): stub 0032:fixme:win:RegisterTouchWindow (0x10056 00000000): stub 0032:fixme:msg:ChangeWindowMessageFilterEx 0x10056 233 1 (nil) 0032:fixme:msg:ChangeWindowMessageFilterEx 0x10056 4a 1 (nil) 0032:fixme:msg:ChangeWindowMessageFilterEx 0x10056 49 1 (nil) Plugin wants different window size after attaching: 830, 598 Sending a shutdown request to the plugin host PluginHost: Destroying plugin with id 1 Waiting for plugin host process to exit 0032:fixme:font:RemoveFontMemResourceEx (0x87faf8c1) stub 0032:fixme:font:RemoveFontMemResourceEx (0x87c58551) stub 0032:fixme:font:RemoveFontMemResourceEx (0x87c386e1) stub dssi-vst-server[1]: exiting PluginHost: Shutting down... PluginHost: Shutting down request reader thread PluginHost: Request reader thread finished PluginHost: Shutting down audio threads PluginHost: Exiting due to shutdown PluginHost: exiting with code 0 Plugin host process exited with code: 0 Waiting for plugin host process to exit Plugin host process exited with code: 0 About to start the following process: /opt/bitwig-studio/bin/BitwigPluginHost64 host Voxengo-SPAN-3 44100 512 20581-3 8 not-dpi-aware Creating plugin audio thread proxy 0 PluginHost: Starting new audio thread for processing plugin 0 Successfully set thread realtime priority to 19 DSSI VST plugin server v0.986 Copyright (c) 2012-2013 Filipe Coelho Copyright (c) 2010-2011 Kristian Amlie Copyright (c) 2004-2006 Chris Cannam LinVst version 2.5 Loading /home/billm/.wine/drive_c/Program Files/VstPlugins/Voxengo/SPAN.dll 0042:fixme:heap:RtlSetHeapInformation 0x260000 0 0x23df90 4 stub PluginHost: Plugin needs to restart processing during initialization Applying plugin IO state Applying plugin instance state Plugin wants different window size after attaching: 935, 605 Sending a shutdown request to the plugin host PluginHost: Destroying plugin with id 1 Waiting for plugin host process to exit dssi-vst-server[1]: exiting PluginHost: Shutting down... PluginHost: Shutting down request reader thread PluginHost: Request reader thread finished PluginHost: Shutting down audio threads PluginHost: Exiting due to shutdown PluginHost: exiting with code 0 Plugin host process exited with code: 0 Waiting for plugin host process to exit Plugin host process exited with code: 0

Airwave: [Fri Apr 26 14:37:41 CDT 2019] Starting audio engine. Detected instruction set: AVX Registering modules... Connecting to server :1234 Loading audio system ... Opening audio device ... Connecting to active project ... Successfully set thread realtime priority to 20 Successfully set thread realtime priority to 19 Successfully set thread realtime priority to 19 Successfully set thread realtime priority to 19 Successfully set thread realtime priority to 19 Successfully set thread realtime priority to 19 Successfully set thread realtime priority to 19 Successfully set thread realtime priority to 19 Successfully set thread realtime priority to 19 LLVM CPU: haswellNitro JIT took: 29ms, total JIT: 29ms [white_noise] Nitro JIT took: 49ms, total JIT: 78ms [blender] Nitro JIT took: 82ms, total JIT: 160ms [voice_stack_spread] Nitro JIT took: 122ms, total JIT: 282ms [VCF_VCA] Nitro JIT took: 184ms, total JIT: 466ms [triggo] About to start the following process: /opt/bitwig-studio/bin/BitwigPluginHost64 host Vladislav Goncharov-Limiter No6-1 44100 512 21252-1 8 not-dpi-aware Creating plugin audio thread proxy 0 PluginHost: Starting new audio thread for processing plugin 0 Successfully set thread realtime priority to 19 002b:fixme:heap:RtlSetHeapInformation 0x240000 0 0x23f4e0 4 stub Applying plugin IO state Applying plugin instance state Sending a shutdown request to the plugin host PluginHost: Destroying plugin with id 1 Waiting for plugin host process to exit PluginHost: Shutting down... PluginHost: Shutting down request reader thread PluginHost: Request reader thread finished PluginHost: Shutting down audio threads PluginHost: Exiting due to shutdown PluginHost: exiting with code 0 Plugin host process exited with code: 0 Waiting for plugin host process to exit Plugin host process exited with code: 0 About to start the following process: /opt/bitwig-studio/bin/BitwigPluginHost64 host Tokyo Dawn Labs-TDR Nova-2 44100 512 21252-2 8 not-dpi-aware Creating plugin audio thread proxy 0 PluginHost: Starting new audio thread for processing plugin 0 Successfully set thread realtime priority to 19 PluginHost: Plugin needs to restart processing during initialization Applying plugin IO state Applying plugin instance state 002d:fixme:ver:GetCurrentPackageId (0xbffdc0 (nil)): stub 002a:fixme:win:RegisterTouchWindow (0x1005c 00000000): stub 002a:fixme:msg:ChangeWindowMessageFilterEx 0x1005c 233 1 (nil) 002a:fixme:msg:ChangeWindowMessageFilterEx 0x1005c 4a 1 (nil) 002a:fixme:msg:ChangeWindowMessageFilterEx 0x1005c 49 1 (nil) 002a:fixme:win:RegisterTouchWindow (0x2005c 00000000): stub 002a:fixme:msg:ChangeWindowMessageFilterEx 0x2005c 233 1 (nil) 002a:fixme:msg:ChangeWindowMessageFilterEx 0x2005c 4a 1 (nil) 002a:fixme:msg:ChangeWindowMessageFilterEx 0x2005c 49 1 (nil) Sending a shutdown request to the plugin host PluginHost: Destroying plugin with id 1 Waiting for plugin host process to exit 002a:fixme:font:RemoveFontMemResourceEx (0x87ebdc61) stub 002a:fixme:font:RemoveFontMemResourceEx (0x87eae621) stub 002a:fixme:font:RemoveFontMemResourceEx (0x87f0eb71) stub PluginHost: Shutting down... PluginHost: Shutting down request reader thread PluginHost: Request reader thread finished PluginHost: Shutting down audio threads PluginHost: Exiting due to shutdown PluginHost: exiting with code 0 Plugin host process exited with code: 0 Waiting for plugin host process to exit Plugin host process exited with code: 0 About to start the following process: /opt/bitwig-studio/bin/BitwigPluginHost64 host Voxengo-SPAN-3 44100 512 21252-3 8 not-dpi-aware Creating plugin audio thread proxy 0 PluginHost: Starting new audio thread for processing plugin 0 Successfully set thread realtime priority to 19 002b:fixme:heap:RtlSetHeapInformation 0x260000 0 0x23f500 4 stub Applying plugin IO state Applying plugin instance state Sending a shutdown request to the plugin host PluginHost: Destroying plugin with id 1 Waiting for plugin host process to exit PluginHost: Shutting down... PluginHost: Shutting down request reader thread PluginHost: Request reader thread finished PluginHost: Shutting down audio threads PluginHost: Exiting due to shutdown PluginHost: exiting with code 0 Plugin host process exited with code: 0 Waiting for plugin host process to exit Plugin host process exited with code: 0

ghost commented 5 years ago

The LinVst plugins log "Plugin wants different window size after attaching". That doesn't appear with the Airwave plugins.

osxmidi commented 5 years ago

I tried comparing the Bitwig blue line in LinVst and Airwave and I can't see much difference.

The window resizing is not really a problem, it's just a resize.

ghost commented 5 years ago

Something I thought of is that Airwave was built using the VST2 SDK, while LinVst uses Vestige. I don't know how to get a hold of the VST2 SDK to test LinVst with it, though.

ghost commented 5 years ago

Could it have something to do with the Jack server? How did you configure jack?

I'm using qjackctl with jack2 configured with realtime privileges.

osxmidi commented 5 years ago

I used to setup jack manually but now I just install Ardour and it sets up jack.

I've run LinVst on XUbuntu and Ubuntu Studio and MX Linux and Debian 9 and AV Linux and Fedora and probably some others using various hardware like quad and 2 core processors (some 32 bit) and various motherboards and ddr2 and ddr3 memory and Nvidia and Intel and AMD/Radeon video cards and I've never seen the problem you are describing and I havn't heard from any other users about the problem either including Arch Linux users so I have no idea and if I could replicate the problem then I'd try to solve it but I suspect it's something to do with your system ie maybe a hardware issue and/or how you might have things setup ie Wine and it's prefixes etc etc.

Some vst's are not going to run and/or not run in a great way especially due to Wines incomplete d2d1 and direct3d but some other vst's should run ok so if they are all not running ok then I don't know what the issue is.

Some things to stay away from are running the 64 bit LinVst version in a 32 bit wineprefix on a 64 bit system (and using the 32 bit only LinVst version on a 64 bit system) and enable gtk3 theming (in winecfg) as they can cause problems and also running LinVst from within Carla.

btw I've added a Bitwig Kontakt fix to the code that seems to work so there is no real need to use the previous fix that I told you about.

ghost commented 5 years ago

I've tried Manjaro again, and it seems to run smoother when I use Manjaro Budgie. Still not perfect, but it's a bit better than it was before. Perhaps something about the Budgie window manager makes it run better on my system for some reason.