Epi numero uno of the down the whole-esque tale of my cross platform libre open source Rust bindgen VST host that I hope to compile for Windows Subsystem for Linux so that I can play the digital piano keyboard in my bedroom and receive low latency output of any VST audio plugin of my choosing!

why in the hell?!

  • a good lesson in DSP (digital signal processing)
  • how to code on Windows in 2018
  • WSL (Windows Subsystem for Linux)
  • gotta use this puppy some way other than gaming:
    • Intel Core i7 6700K @ 4.00GHz (Skylake 14nm Technology)
  • getting started with Rust!
  • I want to play music but I live in NYC and I can't very well play my saxophone at 2am
  • there's not that many CLI cross platform audio tools out there these days that aim to replace a DAW
  • stop pirating and start libre-sourcing!

getting started

So today in the wacky, wonderful world that is me diving into Windows/cross platform dev I broke out my new digital keyboard, hooked it up over USB to my Windows mini-ITX box and was able to sniff the I/O MIDI bus for raw binary and then make sense of it using some nodejs tools.

Next, I went a little deeper into trying to figure out how the 💩 I'm going to sanely develop on Windows and fired up my handy dandy WSL (windows subsystem for linux) Ubuntu 16 image and asked myself "how far can I stretch this thing".

Going deeper, I installed Cmder ( and set up a bash ubuntu task using Running Windows 10 Ubuntu Bash in Cmder - Gingter Ale.

Ever deeper, I fired up Ubuntu and sudo apt update followed by sudo apt upgrade then I went to clone into my Windows drive by cd /mnt/c/Users/<user_name_here> (because only ever install tools inside Ubuntu; not real files/projects).

Next, I realized I didn't have clang or g++ and went and installed using instructions found:

Lastly, I was able to use instructions here to get it properly configured using cmake and now I'm parsing through these errors running make:

[  0%] Building CXX object vendor/CMakeFiles/audiofile32.dir/audiofile/libaudiofile/aes.cpp.o
In file included from /mnt/c/Users/chris/projects/MrsWatson/vendor/audiofile/libaudiofile/aes.cpp:30:0:
/usr/include/string.h:35:42: error: missing binary operator before token "("
 #if defined __cplusplus && __GNUC_PREREQ (4, 4)
/usr/include/string.h:640:56: error: missing binary operator before token "("
     && defined __extern_always_inline && __GNUC_PREREQ (3,2)
In file included from /mnt/c/Users/chris/projects/MrsWatson/vendor/audiofile/libaudiofile/aes.cpp:31:0:
/usr/include/assert.h:37:42: error: missing binary operator before token "("
 #if defined __cplusplus && __GNUC_PREREQ (2,95)
/usr/include/assert.h:105:42: error: missing binary operator before token "("
 # if defined __cplusplus ? __GNUC_PREREQ (2, 6) : __GNUC_PREREQ (2, 4)
In file included from /mnt/c/Users/chris/projects/MrsWatson/vendor/audiofile/libaudiofile/FileHandle.h:24:0,
                 from /mnt/c/Users/chris/projects/MrsWatson/vendor/audiofile/libaudiofile/aes.cpp:33:
/mnt/c/Users/chris/projects/MrsWatson/vendor/audiofile/libaudiofile/afinternal.h:31:10: fatal error: sys/types.h: No such file or directory
 #include <sys/types.h>
compilation terminated.
vendor/CMakeFiles/audiofile32.dir/build.make:62: recipe for target 'vendor/CMakeFiles/audiofile32.dir/audiofile/libaudiofile/aes.cpp.o' failed
make[2]: *** [vendor/CMakeFiles/audiofile32.dir/audiofile/libaudiofile/aes.cpp.o] Error 1
CMakeFiles/Makefile2:151: recipe for target 'vendor/CMakeFiles/audiofile32.dir/all' failed
make[1]: *** [vendor/CMakeFiles/audiofile32.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

Ok, phew so I am now at a stopping point where I'm going to need to figure out which version of C++ I need for this task. I'm guessing 7 is just way too old and I took a stab in the dark.

We shall see...

Share the love!

Thank y'all kindly for the read!