Announcing Libaudioverse 0.9 And Info On The GoFundMe

If you don't already know about Libaudioverse, the short version is that it's basically desktop WebAudio in terms of functionality, though not in terms of API. The point of this post is to provide information and answers to people already using it. I'm going to do posts aimed at a more general audience once I finish the in-progress HRTF refactors and the bindings generator cleanup, so watch this space.

If you are using Libaudioverse, 0.9 is live, and I suggest everyone upgrade. I've also got some important information on the GoFundMe timeline and the future of Libaudioverse's development.

Libaudioverse 0.9

Though you should still definitely consider this at best beta-quality software, Libaudioverse 0.9 is up. This is the first version that I actively encourage people to use. Libaudioverse is now acceptably stable, no major shifts in the API are planned or expected, and it works more than well enough for games. The major shortcoming at the moment is that we only work with Python or C; I'm moving to rectify this situation.

I don't have a full list of changes from 0.8. I'm going to do better preparing release notes as part of the process moving forward; we're now at the point where they're meaningful. A brief list of changes:

  • In order to eliminate confusion, simulation is now Server.

  • The Windows audio backend can theoretically go as low as 10 MS software latency. I've also fixed other bugs, most notably one to do with timer frequencies. If you tried Libaudioverse before and it wasn't playing properly for you, it should now.

  • The Linux audio backend was almost entirely rewritten as well. The latency of it is very high because we don't yet use Pulseaudio and there's no way to tell what you should use with Alsa.

  • Mixahead is back.

  • Audio device identifiers are now strings, in preparation for future improvements.

  • Some critical bugs--most notably a failure to free a pointer in the buffer loading process, which would consequently keep incredibly large chunks of memory allocated--have been fixed.

Libaudioverse uses semantic versioning. In other words, I'm not guaranteeing API compatibility until I release version 1.0. I do not expect major backward-incompatible changes or architectural shifts. All core concepts should remain the same from here on.

I will make a best effort to provide advance announcement of any backward-incompatible changes before releases containing them, offer a migration path, and generally try not to break your software without warning. My ideal is to provide 6 weeks warning before killing old functionality, but this won't always be possible. Such announcements will be made via the Google Group.

Finally, if you find a bug, please report it. I've gotten many reports secondhand. This doesn't help me fix them.

The GoFundMe And The Future Of Libaudioverse

I have good news. It's probably not good news for anyone who wants Libaudioverse to become the best realtime audio library ever, but it's good news for me personally. The problems which have kept me unemployed and in West Palm Beach, Florida, the best tourist town ever and certainly far from the best place for a blind gay atheist programmer nerd, have begun to solve themselves. I anticipate that the loose ends I need to finish handling will be out of the way in 2 to 3 months. At that point, I intend to actively seek employment.

I'm going to spend the next couple months doing everything I can to get Libaudioverse into a position where I can walk away. This means buckling down on what exists, finishing and documenting the bindings genneration infrastructure, making the release process less ad hoc, and finishing the new HRTF implementation (it's half done, otherwise I'd be leaving it off the table). This also means avoiding as many new features as I can.

I will close the GoFundMe on July 1. At that time, based on what we have raised, I will decide which if any of the goals in it I can meet and give a tentative timeline. I should be able to delay moving and job seeking as required to put in whatever time is warranted or, failing that, to work on weekends.

While Libaudioverse is important to me, it is no longer at a point where continuing it provides immediate tangible benefits and it can thus not remain top priority. In terms of my resume, it's already almost a WebAudio implementation written by a single programmer. Not much I can do to it makes it more impressive than it already is. I'm not being paid by the hour, and any job I get is likely to provide a high 5-figure or low 6-figure salary. With some of the time remaining to me before I begin job seeking in ernest, I intend to investigate doing other projects which can widen my resume further and lead to job offers. Ideas which come to mind at the moment include contributing to XLA, prototyping a graph database, or continueing work on the Rust compiler.

My goal is San Francisco by Christmas. I have 3 ongoing conversations that might put me there. I plan to begin active job seeking in July at the earliest but may go sooner should I receive a significant offer.

Once I leave, I will probably have to walk away almost completely. I anticipate being able to accept pull requests for the foreseeable future, including performing code review. Beyond that, I don't know. I'll continue significant work if or when I am fortunate enough to end up working for a company which allows me to work on my own projects (i.e. Google's 20% policy or similar). I think it's more than possible for me to end up having such a job.

When I finish cleaning up the bindings generator, I'd like to begin trying to mentor people who might be able to take over. The bindings generator is an integral part of Libaudioverse, and having it documented is essential for anyone wishing to add new nodes. When things aren't moving anymore, I'll do a general announcement asking for contributors, including a list of what needs to be done.