Libaudioverse advanced 3D audio Development by Austin Hicks -
GoFundMe
https://www.gofundme.com/fund-libaudiov … velopment.
My name is Austin Hicks, and I'm a disabled computer scientist. I've
made significant contributions to the Rust compiler, am known in the
blindness communities
for work on accessibility, and graduated from Florida Atlantic
University with official recognition from the president.
It is a little-known fact that blind people have a form of video game,
usually made by a fellow blind developer and usually without
expectation of significant
monetary return. These games rely fully on audio, and the state of
the art is advanced enough to give us such things as a playable doom
clone, a few realtime
strategy games, and even an online zombie-themed FPS. Microsoft
provided advanced 3D audio and high quality effects through DirectX
until Windows Vista,
when they decided that it wasn't worth maintaining and replaced it
with a much more basic version. There are commercial solutions that
make up for it,
but they all cost more than most single developers can afford. So I
turned to the free and open source software ecosystem and, much to my
surprise, found
very little that was production ready. I was therefore motivated to
spend my free time over the last 3 years on a cross-platform, free and
open source
library called
Libaudioverse.
It is now very near the point of an initial release.
Libaudioverse
is a dual-licensed GPL3/MPL2 package for all sorts of audio
synthesis tasks, roughly 15000 lines of C++ and all by me personally.
As a user, it looks
very similar to WebAudio. It's fast, high-level, and incredibly
flexible. Using head-related transfer function technology, it can
provide 3D audio through
headphones so good you can tell if something is above or below you.
Porting it to new systems only requires writing audio backends and
implementing other
I/O interfaces. It currently works on Windows and GNU/Linux.
Applications include functioning as the audio system for a game,
implementing virtual instruments,
analyzing audio from a microphone, implementing media players with
realtime effects, and so on.
One interesting application of Libaudioverse is it's ability to be
integrated into NVDA, a free and open source screen reader for the
blind. In this role,
it is currently used to provide information on controls as a
replacement for spoken information and to allow some basic exploration
of otherwise inaccessible
images. In the longest run, I want to investigate using it to develop
tools that allow blind people to do accessible data science.
Libaudioverse was built from the ground up to be used from any
language. It's designed so that even languages like Python can be used
to design efficient
audio applications, and it even integrates with garbage collectors.
In terms of features and capabilities, it attempts to sit between the
research-oriented
packages (things such as SuperCollider, Csound, Nyquist, etc) and the
low-level and/or domain-specific packages (OpenAL, PortAudio, etc).
Unlike many
of the research tools, Libaudioverse is designed to be packaged, so
algorithms written using its components are immediately ready for
production use.
And unlike the lower-level, domain specific options, Libaudioverse is
flexible. It can also use multiple cores, something extremely
important on modern
systems.
In the long run, I want to do a lot more. I have the knowledge to
implement more advanced functionality such as waveguide meshes and
other physical modelling
components, including accelerating some of it on the GPU. As a
package with applications in gaming, porting it to phones and embedded
devices is important.
If I get it running on the Raspberry Pi, it can be used in education.
Though quite efficient already, I can still make it significantly
faster. It could
be extended to stream from the internet, or even to build multi-
machine audio applications.
Unfortunately, I am a blind programmer who also suffers from a painful
condition known as Ulcerative Colitis, and I am now at the point where
I must begin
seeking employment or other money-making opportunities. I have to
pick between a traditional job or having enough free time to work on
large projects
like this. Libaudioverse is very important to me personally. I would
prefer not to work on closed source software for some large, faceless
corporation.
Instead, I'd love to continue producing free and open source software
that solves problems for everyone. In addition to being incredibly
useful in itself,
finishing it would give me a resume suitable for someone who wishes to
continue working in the open source space.
I realize I have an insignificant reputation outside very specific
circles of the open source community, so I've set the current goal at
$17000. While
I could certainly use more, this is enough money for me to complete
what already exists. It'd let me get it running on Mac, add Midi and
microphone support,
finish documentation, produce a web site, and hire another programmer
who can do graphics programming to help produce demo software showing
it off. It
will also allow me to fix critical bugs after the initial release.
With the initial release as a foundation, I intend to seek further
funding in order
to provide features I haven't started, such as the aforementioned
internet streaming support or the SIMD optimizations needed to run
efficiently on the
Raspberry Pi.
Libaudioverse already has concrete advantages over all other open
source solutions I am aware of. In the long run, Libaudioverse will
effectively compete
with commercial, closed-source solutions.
They say time is money, but this isn't quite true for the open source
developer. Money is in fact time, since we have to pay our bills
somehow. It's
my hope that you'll help me have the time to finish this project. I've
already put a lot into it with no monetary return, and now I need your
assistance.
In the event that we do not meet the goal, I'll do what I can. All
progress will of course be documented.
Help spread the word!
Report Campaign
$300 of $17k goal
2 percent
Raised by 3 people in 9 days
Check out Libaudioverse. It's in the pip repositories, and you can
find the readme here:
https://www.github.com/camlorn/libaudioverse