A library for realtime audio synthesis with 3D and environmental audio support
HTML C++ C Yacc Python Perl 6 Other
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
audio_io Upgrade audio_io, bringing in a new set of less buggy backends. Mar 6, 2017
bindings Fix a bunch of small Python bindings bugs. Apr 4, 2017
cmake_include When compiling with devmode off, force /GL and /Ox. Apr 30, 2017
diffuse mit kemar dataset Integrate default HRTF building into the build process. Jun 9, 2015
docgen More stuff to make documentation deterministic. May 28, 2016
documentation Bump the manual's version. May 28, 2016
experimentation Reindent all the Python. Sep 17, 2015
glm Update dependencies. Mar 7, 2016
include/libaudioverse Major HRTf improvements both in performance and quality. Apr 30, 2017
kissfft Kissfft cannot be a submodule. Pulled files that we need and added to… Dec 29, 2014
logger_singleton @ 4e809a7 Transition us back to submodules. Dec 7, 2016
metadata Upgrade audio_io, bringing in a new set of less buggy backends. Mar 6, 2017
powercores @ 73eea8b Transition us back to submodules. Dec 7, 2016
prototypes Reindent all the Python. Sep 17, 2015
scripts Major HRTf improvements both in performance and quality. Apr 30, 2017
speex_resampler_cpp @ eb6cc6a Transition us back to submodules. Dec 7, 2016
src Fix a memory leak in buffer loading. May 4, 2017
vendoring [skip ci] Everything can build for Windows x64. May 23, 2016
.gitignore Ignore out.txt, because I make one all the time Dec 7, 2016
.gitmodules Upgrade audio_io, bringing in a new set of less buggy backends. Mar 6, 2017
.travis.yml Travis should now sed e-mail notifications Dec 8, 2016
CMakeLists.txt Bunch of work that should make Appveyor publish artifacts." May 24, 2016
COPYRIGHT Typo fix. Jan 6, 2017
LICENSE.GPL3 Copy Rust's licensing statement. This is probably better than ours, i… Dec 7, 2016
LICENSE.MPL2 Copy Rust's licensing statement. This is probably better than ours, i… Dec 7, 2016
appveyor.yml Fix some appveyor urls. May 5, 2017
audio eq cookbook.txt Update the audio eq cookbook. Jun 20, 2015
circle.py Major HRTf improvements both in performance and quality. Apr 30, 2017
citations.md Major HRTf improvements both in performance and quality. Apr 30, 2017
contributing.md contributing.md is now no longer a draft, and we are accepting pull r… Dec 7, 2016
demo_everything.py Updated to new API and made it pep8 compliant. Jun 4, 2017
hrtf file format.txt HRTF files contain an as-of-yet unused UUID. Oct 14, 2015
license_replacer.py Update license headers, again copying Rust Dec 7, 2016
platform_support.md Update the readme to better reflect the current state of development … Mar 21, 2016
pypirc.cfg Point the pypi repository back at the main pypi. Mar 23, 2016
readme.md Link the GoFundMe. Apr 10, 2017

readme.md

Libaudioverse

Windows Build status

Linux Build Status

GitHub

I'm trying to raise money for this project, so I can put a few months of full-time work into it. Consequently, we have a GoFundMe.

Introduction

Libaudioverse is a highly flexible realtime audio synthesis library designed to be bound to as many languages as possible. Potential applications include games, realtime music synthesis, voice chat, implementations of WebAudio, and more. Libaudioverse supports the best possible backends it can for each platform, and uses both SSE2 and threads for increased performance.

At the core of Libaudioverse is the concept of a node, a piece of meaningful audio architecture. They can be connected in any acyclic configuration, allowing the creation of much more complex effects. It is possible to schedule property changes and envelopes with sample-perfect accuracy;. For more complex effects, nodes can be connected directly to the properties of other nodes.

here is an overview of the offered nodes:

  • The environment and source nodes come together to act as a fully functional 3D audio environment, including support for HRTF, surround sound, and reverb.
  • The FDN reverberator is an environmental reverb capable of representing everything from a bathroom to a cathedral.
  • If you want to play with Schroeder Allpass sections, try the nested Allpass Network node.
  • A variety of lower-level filters are available: Biquad, first-order, one-pole, and convolution.
  • It is possible to implement any IIR filter, either by cascading lower level filters or by using the IIR filter node directly.
  • Oscillator options include sine and square, as well as a configurable noise generator.
  • there are several delay line types. Most delay lines offer support for feedback, and the filtered delay line allows filtering this feedback.
  • You can record audio with the recorder, or intercept audio anywhere in the graph of nodes with the graph listener.
  • Finally, if none of these meet your needs, it is possible to create your own node via the custom node.

NOTE: This is pre-alpha and supports Windows and Linux. Mac is planned.

Licensing

See the file COPYRIGHT for the legalese. This file is definitive, and the following a summary only.

The non-legalese version is that Libaudioverse is dual-licensed under GPL V3 or later (see here for GPL V3) and MPL2.

Documentation and Examples

There are two sources of Libaudioverse documentation.

The first is the language-agnostic manual, which discusses Libaudioverse from a general perspective. This manual contains the reference for the C API and an overview of Libaudioverse's core concepts. Most examples in this manual are in Python.

The second source of documentation is the API reference for your language of choice. At the moment, this means the Python API reference. The API references contain installation instructions and any notes specific to the language in question.

Examples for all supported languages may be found in the GitHub repository. These sets of examples aim to be equivalent and to demonstrate most critical features of Libaudioverse. This library is easy. In many cases, the examples will be enough to get you started.

Getting Help

Libaudioverse has a Google Group. You can subscribe directly and without a Gmail address via e-mailing an empty e-mail to libaudioverse+subscribe@camlorn.net and clicking the link in the confirmation e-mail sent to you. I prefer questions to come via this avenue, as it results in your answers being searchable in future. If you need to contact me in real-time, you can do so via the Libaudioverse IRC channel: #libaudioverse on chat.freenode.net.

Please report bugs and make feature requests using the GitHub issue tracker; this saves me time for issues which I cannot fix immediately.

Building

See the info on supported platforms and build instructions.

Bindings

At the moment, Python and C are the only supported languages. You can get the Python bindings via pip on Windows, but Linux currently requires building Libaudioverse yourself. As more languages become available, Libaudioverse will attempt to upload binaries to package managers. The goal is to minimize the number of use cases that require building Libaudioverse.

Libaudioverse's approach to bindings is such that it is possible to add more languages in short order. If you are seriously considering using Libaudioverse in a specific language, I wish to talk to you. The addition of a new language is mostly a one-time process, after which the bindings literally maintain themselves. Which language I add next is primarily based on interest.

Note: Your language must support C callbacks, at least 2 levels of pointer indirection and thread primitives in order to be successfully bound to Libaudioverse. The only language I am currently aware of that fails to implement these three things is Angelscript in the BGT scripting environment.