TABLE OF CONTENTS
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 (http://cmder.net/) 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 https://github.com/teragonaudio/MrsWatson 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: https://stackoverflow.com/questions/50729550/installing-g-on-windows-subsystem-for-linux.
Lastly, I was able to use instructions here https://stackoverflow.com/questions/17275348/how-to-specify-new-gcc-path-for-cmake 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...