Howl - Self Contained Build Environment for OWL

Hey fam,

Had to set Howl aside last week a bit because I had to move some gear and focus on other projects. But I did pick up my OWL from the lab yesterday and am able to cram some development in during the week. Heres whats happend:

  • Ubuntu Xenial is dead: i have abandoned ubuntu/xenial64 as base box. It is maintained without ALSA and getting USB Audio/Midi kernel modules running was causing too much of a fuss.
  • Long live generic/arch: Adopted Arch Linux instead of Ubuntu LTS. generic/arch comes with precompiled and installed ALSA modules that seem to work out of the box.
  • Plan to use packer.io: Im currently planning to extend generic/arch to a custom how-arch vagrant box hosted on vagrant cloud. This should make the Vagrantfile in howl more maintainable and the installation process easier. The plan is to pre-install as much as possible in this box and remove most of the shell provisioners I used in the Vagrantfile previously
  • FirmwareSender no longer crashes: Its ported to JUCE 5.2 now on howl. @mars: i havent tested patch deployment yet but the app no longer crashes because of JUCE or ALSA making a fuss. I assume the migration to 5.2 is easy enough if you guys want to do it. Or i can make a merge request, allthough the diff would be in the .jucer file mainly and it might be easier to just update the JUCE version and add the user code on your end. Or even add a note to the documentation for FirmwareSender if people want to use newer versions of JUCE with it.

Next Steps:

  • Compiling C++ patches: Now that the VM seems to work for FirmwareSender i can see if i can get a basic C++ patch to compile.

Release Plan:

  • Hope to get the experimental release out in March. The release would still be considered instable but ready to be played around with. Main Features planned for the first release:
  • Tested support for Mac OS X host systems, vagrant and virtualbox hypervisor
  • Support for compiling C++ patches
  • Basic Documentation on github and in source

Talk soon,

2 Likes

FirmwareSender : I’ve put it on my todo-list to upgrade the JUCE version. (Unfortunately, it’s a long todo-list…)

Well now is as good a time as any! I’ve done the JUCE upgrade, it’s in the master branch of FirmwareSender. Thanks so much @bfabricius for the heads-up on JUCE_ALSA_MIDI_NAME. I got the same segfault, I would have spent ages on that if you’d not told me!
Let me know if you try it out, I’ve not made a release of it yet so we can still fix issues.

oh actually, there’s a problem.
Turns out the MIDI devices are somehow differently named after the update, probably ALSA related. The OWL device shows up as OWL-MIDI MIDI 1 - note the added MIDI 1 at the end.
This means that the default in the OwlProgram Makefile doesn’t work. Furthermore, since there is now whitespace in the device name they need to be quoted in the invocation.

I’ve pushed a change to OwlProgram so that the name is quoted correctly. You can now either build with e.g.
OWLDEVICE="OWL-MIDI MIDI 1" make ...

Still this is pretty awkward… Why are simple things never simple??

1 Like

Had to laugh at this one, story of my DIY life, really. Pretty funny, i was just going to write about the MIDI device name, i just ran into it :P. Thanks for already adding it to the thread.

No worries, mate. I’m enjoying being able to contribute and hoping that Howl turns out in a way that makes it a useful add-on to your stuff.

Talk soon,

@mars, btw… did you ever get the leaks in FirmwareSender under control?

[vagrant@bazinga OwlProgram]$ OWLDEVICE="OWL-MIDI MIDI 1" make PATCHNAME=Gain run
Building patch Gain
Sending patch Gain to OWL-MIDI MIDI 1 to run
JUCE v5.2.1
*** Leaked objects detected: 1 instance(s) of class MidiOutput
JUCE Assertion failure in juce_LeakedObjectDetector.h:88
*** Leaked objects detected: 1 instance(s) of class Thread
JUCE Assertion failure in juce_LeakedObjectDetector.h:88
*** Leaked objects detected: 2 instance(s) of class WaitableEvent
JUCE Assertion failure in juce_LeakedObjectDetector.h:88
*** Leaked objects detected: 1 instance(s) of class OwnedArray
JUCE Assertion failure in juce_LeakedObjectDetector.h:88

I remember you mentioning some changes… maybe im still not working with the latest source.

Cheers,

Yes they should be fixed since b02f01ef957, see Leaked object messages in Debug build · Issue #1 · pingdynasty/FirmwareSender · GitHub

1 Like

Hey all,

Howl status update:

  • Just compiled and ran the first c++ patch with Howl! Boom. It’s just a GainPatch from the official online patches repository. I dont have audio running through the moudule atm, but OwlControl reports the patch is running, so good times!

Next Steps:

  • Bring order into chaotic proof-of-concept and extending generic/arch box to htaudio/how-arch (pre-provisioned with tools and toolchain binaries)
  • Package everything nicely for release: this entails installer script that installs the VM from vagrant cloud, makes sure guest addiction plugin is installed to mount synced folders and installs latest owl program
  • Create script that can run build commands for compiling and deploying c++ patches via ssh within howl

Later,

1 Like

good stuff!

A note on the FirmwareSender : the OWL device name that you pass in can actually contain a wildcard, so “OWL-MIDI*” should work for both versions.

1 Like

I had some time for Howl today, so here’s an update:

I’ve refactored most of the code and am currently playing around with a project layout that I can release.

  • htaudio-de/arch-howl base box v0.1.1 (experimental) is now released on vagrantcloud
  • Im about half way through the installer script which is intended to automate most of the setup process

Currently the installer:

  • checks for virtual box running on host
  • installs the arm toolchain on host if it hasnt already been installed
  • installs owl program on host if it hasnt been installed and is capable of updating owl program from git
  • installs the new arch-howl base box for vagrant if it hasnt been added yet

Ive also refactored the Vagrantfile and kicked most provisioning out of it. A lot of what I was doing there is no longer necessary because the box already comes with all necessary dependencies installed including the FirmwareSender binary which is alredy installed into the box at /usr/local/bin

Next Steps:
Finish installer:

  • vagrant up, and running an arch upgrade provisioner (this already works from cli)
  • running vagrant provisioner to build OWL patch binary
  • running a test to check if FirmwareSender works
  • running a USB Midi test
  • running a c++ test compile patch

So its coming along nicely, hope to continue work soon.

Cheers,

1 Like

Heads up…

Seems to be a problem with the released box on vagrantcloud. I simply extended my arch box and released it but when i just installed it and wanted to boot it using the howl installer vboxmanage spits out errors when trying to import virtual drives. Ill have to take another closer look at this.

More soon.

Sorry for being MIA for a while. A lot going on right now and too little time :stuck_out_tongue:

Im proud to announce I have improved the vagrant box build for Howl quite a bit now. I have now incorporated using packer.io to fully automatically build a Vagrant linux image with all dependencies pre-installed. No more provisioning necessary in the Vagrantfile and the Howl installer I am designing just became a lot less complex :).

For those interested in already giving the Box a spin, you can get it on vagrantcloud: https://app.vagrantup.com/htaudio-de/boxes/arch-howl/versions/0.1.3
Now, the import should work just fine with vagrant.

Also, I have released howl-arch-packer on github if anyone wants to have a go with it. This is the packer.io build project I have written to automate my builds.
GitHub - bfabricius/howl-arch-packer: Packer project to build a Vagrant Box for Howl, the virtual

@mars Rolling updates of OwlProgram and Firmwaresender should now be much more easy to maintain with Howl; OwlProgram will be updateable in Howl directly since the vagrant image contains the git repository.

Howl now contains convenient test scripts to run after installation to check if the toolchain, firmwaresender and OwlProgram work. Im excited to finish the first version of Howl asap. Ill keep y’all posted as per usual.

Cheers,

1 Like

Awesome - I’ll give it a go!

1 Like

Sounds great! I should have a first version of Howl up on github soon, too. Ideally, we’ll get a few people together then to actually test this for Mac on different machines properly to find any issues. I expect a few more commits before i can move the packer to a first stable release tag, you can follow the project on github if you want to get auto notifications on changes. :slight_smile:

Cheers,

Hi guys,

I’ve started a Howl project on git now :sunny:

Note: This is currently WIP, the documentation is incomplete and not all commands listed with howl help are implemented yet, so at this point use the software at your own risk! Currently only supports OS X.

Here’s what should work:

  • installer
  • howl commands: start, stop, listdevice, listpatches, test, status

In order to finish the first experimental release I will add missing commands so that we can

./howl compile --lang=cpp patches/cpp/GainPatch.hpp
./howl run --lang=cpp patches/cpp/GainPatch.hpp

So a first release is now in reach!

PS: During testing with the new arch-howl virtual machine image, I discovered some smaller issues, please take note of them FYI here: Issues · bfabricius/howl-arch-packer · GitHub

Later,

Hi all,

@mars, @sinewave440hz

Ive just uploaded a new arch-howl vagrant box. This was built for pd language support.

I’ve already got pd language support working for howl on my machine , theres just a few minor things i need to fine tune and then I’m ready to release howl 0.1.5-experimental with pd support. :heart_eyes: Howl will make use of enzien heavy builds, so pd compilation will only work if you have an internet connection.

With the good news, comes the slightly bad, i ran an upgrade on howl-arch and virtualbox today and after that the vagrant automount commands for the shared folders was broken. With the arch rolling releases stuff like this is always likely to happen after upgrading because things constantly change. Fortunately i was able to find a way to patch vagrant so that it works again. So in case vagrant don’t release this bugfix soon (which is likely :frowning: ), howl installer will have to patch your vagrant installations.

Im looking to get rid of these side effects with the first stable release.

UPDATE / FYI: chris just updated the bug thread, they will put the fix into the next vagrant release: Incompatibility with Linux 4.16 mainline Virtualbox guest driver · Issue #9709 · hashicorp/vagrant · GitHub

Cheers,

1 Like

Pd support is now given in howl:

$ ./howl build -l=pd -n=HeavyOwl pd/HeavyOwl.pd
[INFO] Following compile options have been set:
===========================================================================
DSP patch name:			HeavyOwl
DSP patch language:		pd
Howl patch repository path:	/howl/patches/pd/HeavyOwl.pd
Run DSP patch:			0
===========================================================================
[INFO] Building pd patch HeavyOwl at Howl patch repository path HeavyOwl. Follow Howl virtual machine build output below:
PD patch /howl/patches/pd/HeavyOwl.pd found.
PD patch /howl/patches/pd/HeavyOwl.pd copied to OwlProgram patch source folder.
Building patch HeavyOwl
Job URL: https://enzienaudio.com/h/bfabricius/owl/6
Heavy release: r2018.03
Downloaded files placed in:
  * c-src: /home/vagrant/source/OwlProgram/Build/Source
Total request time: 1253ms
Successfully compiled PD patch HeavyOwl
Connection to 127.0.0.1 closed.

I now have to add the vagrant patch into the installer and after that I will release v0.1.5-experimental :sunny:

Cheers,

Update regarding vagrant patch:

Good news: I found out i can actually simply hide the deprecated /usr/bin/mount.vboxsf binary by moving it in the filesystem. That removes the necessity of patching vagrant which would be an ugly thing to have to do.

Instead i built a patch stage into the installer which fixes this problem in the virtual machine and can be run after howl is installed. I didnt bake this into a new virtual box image because this is somewhat of a temporary necessity until vagrant release this bug fix soon.

FYI: if interested in the latest changes on git before i release: follow and star the howl repo here: GitHub - bfabricius/howl: Hypervised OWL build environment for audio DSP patch compilation and dep

You can already use pd now with latest master, i added some commands to configure the HEAVYTOKEN, check ./howl help for more. Release following in the next days.

Cheers,
Ben

Just added new howl milestones as outlook to the next planned releases, any feedback on what else you would like to see in howl is welcome, either PM me directly or comment here in this thread.

Howl 0.1.5-experimental, due May, 6:

Howl 0.1.7-experimental, due Aug, 31:

All due dates considering the limited time i have to work on this and some other project that are in the pipeline. :slight_smile:

I’d like to take the time to thank @sinewave440hz for his efforts in testing the latest howl release and entering issues into github. Thanks man, I appreciate the effort and feedback!!

If anybody else playing with howl finds there are any issues running locally, please dont be shy and get back to me or even better, also create issues on github! This helps me a lot to improve the software over time.

Cheers,

Very happy to help with this project! Since those issues I am pleased to report that I have now successfully built and run both the c++ and pd starter patches :tada: Hopefully I will have time to contribute a PR or two soon. I really recommend that others try this out, there are a lot of things we could do with it in the future. The workflow is very nice in my opinion.

1 Like