Airwave - yet another WINE VST bridge for Linux (April 12 update)

Official support for: bitwig.com
User avatar
KVRist
413 posts since 27 Mar, 2014

Post Mon Jul 14, 2014 2:06 am

<UPDATE April 12st 2015>

I've made a first major version bump. This release has a few fixed issues and adds an ability to select WINE prefix and WINE loader on per plugin basis. The GUI configuration tool has rewritten from scratch and now it uses the Qt 5. The configuration file format has changed, so you will lose all of your existing links after the update. I recommend to remove existing links before updating to the new version.

Pre-built packages for Ubuntu 14.04 and Arch Linux are available on the releases page.
Maybe I'll build Fedora package in the future, but can't promise that now.
Of course, you can build airwave from sources as usual. The build instruction is also updated.

Have fun! :wink:

</UPDATE>

After several months of development, I finally brought my project to the usable state. Of course, it has many not implemented features and bugs ;-) , but this is only an initial public release. From this moment I will concentrate on fixing bugs and implementing the most important features.

This project would not have been created without the help of the following people:
  • Alexandre Bique (abique) - you are the pioneer of the VST bridging :-). Your project, the vst-bridge, had a big impact on my motivation and serve as an excellent prototype for my work.
  • Sebastian Lackner (slackner) - your professional advices about the dark corners of the wine and xlib are the great help for me.
My VST bridge uses the shared memory to exchange data. Due to this only one extra copying is made for each data transfer. The XEMBED protocol support is also implemented, so the plugin editors are correctly working, the pop-up menus are appearing on the right place and so on =).

The project was tested mainly with the Bitwig Studio, but other hosts (the Renoise tracker for example) could also work.

Requirements:
  • WINE, supporting XEMBED protocol (versions greater than 1.7.19 were tested, but earlier versions also may work).
  • Qt4 for building the GUI utility application.
  • Multilib-enabled toolchain for building 32-bit binaries on the x86_64.
  • CMake >= 2.8 for building.
  • GIT for getting the project source code.
Known issues:
  • There is some hack for embedding the editor window. You have a chance to get the black window instead of the plugin editor ;-).
  • Handling of the effGetChunk/effSetChunk events is not implemented. Bank/preset load/save operations may not work.
Installation:
For installation and usage instructions please read the README file, which included with sources.
If you use the Arch Linux, then you can get the latest development version by installing airwave-git package from the AUR. In other case you can grab the sources from the GIT repository:

Code: Select all

git clone https://github.com/phantom-code/airwave.git
Have a nice day!


UPDATE: Before building the Airwave, you should install all required libraries and tools. Here is instructions for some popular Linux distributions:

Ubuntu 14.04 (x86_64)

Code: Select all

sudo apt-get install git cmake gcc-multilib g++-multilib libx11-dev libx11-dev:i386 qt4-default libmagic-dev
sudo add-apt-repository ppa:ubuntu-wine/ppa
sudo apt-get update
sudo apt-get install wine1.7 wine1.7-dev
Fedora 20 (x86_64)

Code: Select all

yum -y install gcc-c++ git cmake wine wine-devel wine-devel.i686 file file-devel libX11-devel libX11-devel.i686 qt4-devel glibc-devel.i686 glibc-devel
Last edited by phantom-one on Wed Apr 15, 2015 9:24 am, edited 12 times in total.

User avatar
KVRian
1186 posts since 23 Jun, 2007 from Findlay OH USA

Post Mon Jul 14, 2014 2:48 am

phantom-one wrote:After several months of development I finally brought my project to the usable state.
Cool, I'll check it out today and report back.
Alexandre Bique (abique) - you are the pioneer of the VST bridging :-)
All props to Alexandre, but the real pioneer of this stuff is Kjetil Mattheussen. After Kjetil, notable coders of VST bridges include the DSSI team, the JACKLAB crew, Joe Button, and most recently Felipe Coelho, aka falkTX. And of course none of this would have happened at all without the Wine project.

Best,

dp

User avatar
KVRian
1186 posts since 23 Jun, 2007 from Findlay OH USA

Post Mon Jul 14, 2014 3:26 am

This error isn't really your code's issue. I built and installed Wine myself, so its include files are all in /usr/include/wine. Alas, there doesn't seem to be a complete PATH setting for Wine, as per this error:

[ 15%] Building CXX object host/CMakeFiles/airwave-host-32.dir/host.cpp.o
<command-line>:0:0: warning: "__cdecl" redefined [enabled by default]
<command-line>:0:0: note: this is the location of the previous definition
In file included from /home/dlphilp/src/airwave/host/host.cpp:3:0:
/home/dlphilp/src/airwave/host/slaveunit.h:6:21: fatal error: windows.h: No such file or directory
#include <windows.h>
^
compilation terminated.
winegcc: g++ failed
make[2]: *** [host/CMakeFiles/airwave-host-32.dir/host.cpp.o] Error 2
make[1]: *** [host/CMakeFiles/airwave-host-32.dir/all] Error 2
make: *** [all] Error 2

Yet here we see:

ls /usr/include/wine/windows/windows.h
/usr/include/wine/windows/windows.h

I'm working on Fedora 16 x86_64. My Wine build (version 1.6.2) created a 32-bit executable, I assume the windows.h file is the correct type as well. Where is your windows.h located ?

Best,

dp

User avatar
KVRist

Topic Starter

413 posts since 27 Mar, 2014

Post Mon Jul 14, 2014 3:31 am

I have windows.h in /usr/include/wine/windows/windows.h
You could try to change include line
from

Code: Select all

#include <windows.h>
to

Code: Select all

#include <wine/windows/windows.h>
Also, you have the wine 1.6 version. I wonder if it will work properly.

KVRian
790 posts since 26 May, 2013 from France, Sisteron

Post Mon Jul 14, 2014 3:44 am

I think that wineg++ should find the include no?

User avatar
KVRist

Topic Starter

413 posts since 27 Mar, 2014

Post Mon Jul 14, 2014 4:17 am

StudioDave, I fixed the include line, you can fetch latest changes from the develop branch:

Code: Select all

git clone -b develop https://github.com/phantom-code/airwave.git
Last edited by phantom-one on Thu Jul 17, 2014 1:08 pm, edited 1 time in total.

User avatar
KVRian
1186 posts since 23 Jun, 2007 from Findlay OH USA

Post Mon Jul 14, 2014 8:26 am

phantom-one wrote:StudioDave, I fixed the include line, you can fetch latest changes from the develop branch:
Thanks, I started over with a reinstallation of Wine here, your code compiled cleanly, and I can open the utility. The directory panels work fine, I could select a native Windows VST and apply the link tool. Unfortunately every attempt resulted in an error, "The dll file has uncompatible architecture."

The plugins tested are 32-bit:

file SQ8L.dll
SQ8L.dll: PE32 executable (DLL) (GUI) Intel 80386, for MS Windows

file Crystal.dll
Crystal.dll: PE32 executable (DLL) (GUI) Intel 80386, for MS Windows

et cetera. Any suggestions ?

Best,

dp

KVRian
790 posts since 26 May, 2013 from France, Sisteron

Post Mon Jul 14, 2014 8:28 am

StudioDave, could you install 64bit version of these dlls?

User avatar
KVRist

Topic Starter

413 posts since 27 Mar, 2014

Post Mon Jul 14, 2014 8:41 am

StudioDave wrote:Unfortunately every attempt resulted in an error, "The dll file has uncompatible architecture."

The plugins tested are 32-bit:

file SQ8L.dll
SQ8L.dll: PE32 executable (DLL) (GUI) Intel 80386, for MS Windows

file Crystal.dll
Crystal.dll: PE32 executable (DLL) (GUI) Intel 80386, for MS Windows

et cetera. Any suggestions ?
This is very strange. It looks like you have built 64-bit airwave, what should be disabled in the cmake rules. Could you post output of the following commands here? (correct the path, if you set another install prefix):

Code: Select all

file /usr/share/airwave/airwave-plugin-32.so
file /usr/bin/airwave-host-32.exe.so
I temporarily disabled checking architecture, you may try the latest version from the develop branch. But I think that something is going wrong here and it will not help.

User avatar
KVRian
1186 posts since 23 Jun, 2007 from Findlay OH USA

Post Mon Jul 14, 2014 9:56 am

Hey, phantom, thanks for the help, we'll get there yet. :)

What I got from the reports:

[dlphilp@localhost bin]$ file airwave-host-32.exe.so
airwave-host-32.exe.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=0x6c9ed75db6e520100d8b31c509caaaf24a460816, not stripped

[dlphilp@localhost bin]$ file ../share/airwave/airwave-plugin-32.so
../share/airwave/airwave-plugin-32.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=0x660550b497ce87f86cd123e7ff937cdf9b0591fa, not stripped

[dlphilp@localhost bin]$ file airwave-utility
airwave-utility: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x88a032f50063f4629bc1fdd3c6d694c1122aa8fb, not stripped

So yes, I'm building the utility as a 64-bit executable.

A quick question: Do you have Qt4 installed for multiarch ?

Best,

dp

User avatar
KVRist

Topic Starter

413 posts since 27 Mar, 2014

Post Mon Jul 14, 2014 10:38 am

Thanks for your feedback, it will help to take into account the current shortcomings.
The airwave-utility application should be built for the native architecture. If you are on x86_64, it should be x86_64 too. Only airwave-plugin and airwave-host are forced to 32-bit arch. So it looks like you have built correct binaries, but for some strange reason architecture checking is not works (it uses the same libmagic, that used by the file command). I recommend uninstall what you have built and rebuild again from the develop branch with disabled arch-checking code (git clone -b develop https://github.com/phantom-code/airwave.git).
Last edited by phantom-one on Thu Jul 17, 2014 1:08 pm, edited 1 time in total.

User avatar
KVRist

Topic Starter

413 posts since 27 Mar, 2014

Post Mon Jul 14, 2014 11:02 am

I found some cut'n'paste error in my code and fixed it. Changes are in the develop branch now, but they will be merged to the master soon.
Thanks for reporting!

User avatar
KVRian
1186 posts since 23 Jun, 2007 from Findlay OH USA

Post Mon Jul 14, 2014 2:29 pm

phantom-one wrote:I found some cut'n'paste error in my code and fixed it. Changes are in the develop branch now, but they will be merged to the master soon.
Thanks for reporting!
Got it built and apparently working, but the plugin links aren't loading in BWS 1.0.11 rc1 :

For FMMF.so :

fixme:ntdll:NtLockFile I/O completion on lock not implemented yet

For pg8x-1.02a.so :

fixme:thread:GetThreadPreferredUILanguages 52, 0x33f598, 0x33f608 0x33f5a0

Almost there now. I'll try some more after teaching tonight.

Best,

dp

User avatar
KVRist

Topic Starter

413 posts since 27 Mar, 2014

Post Mon Jul 14, 2014 10:57 pm

StudioDave wrote:Got it built and apparently working, but the plugin links aren't loading in BWS 1.0.11 rc1 :

For FMMF.so :

fixme:ntdll:NtLockFile I/O completion on lock not implemented yet

For pg8x-1.02a.so :

fixme:thread:GetThreadPreferredUILanguages 52, 0x33f598, 0x33f608 0x33f5a0

Almost there now. I'll try some more after teaching tonight.

Best,

dp
Fixed another two little errors (changes are in the develop branch). Both plugins are work for me now. Please note, that BWS sometimes does not handle updated VSTs correctly. In some cases you need to manually click the "rescan" button and then click "reindex" popup menu item.
You could also enable more informative logging to stderr. To do this, build the debug version of airwave (change -DCMAKE_BUILD_TYPE from "Release" to "Debug" in cmake arguments).

User avatar
KVRian
1186 posts since 23 Jun, 2007 from Findlay OH USA

Post Tue Jul 15, 2014 3:40 am

phantom-one wrote:Fixed another two little errors (changes are in the develop branch). Both plugins are work for me now. Please note, that BWS sometimes does not handle updated VSTs correctly. In some cases you need to manually click the "rescan" button and then click "reindex" popup menu item.
You could also enable more informative logging to stderr. To do this, build the debug version of airwave (change -DCMAKE_BUILD_TYPE from "Release" to "Debug" in cmake arguments).
Thank you ! I now have a working airwave, the linked plugins seem to be working fine. However, my Wine upgrade borked all the plugins I made with abique's software, so I have to redo that stuff, no big deal and certainly not a problem with airwave.

Nice work. I especially like the GUI, very handy. Any chance of 64-bit suppport ?

Best,

dp

Return to “Bitwig”