A low-level open source audio graph engine for games and applications, written in Rust.
This crate can be used as-is or as a base for other higher-level audio engines. (Think of it like wgpu but for audio).
- Modular design that can be run on any backend that provides an audio stream
- Included backends supporting Windows, Mac, Linux, Android, iOS, and WebAssembly
- Flexible audio graph engine (supports any directed, acyclic graph with support for both one-to-many and many-to-one connections)
- A suite of essential built-in audio nodes
- Custom audio node API allowing for a plethora of 3rd party generators and effects
- (TODO) Basic CLAP plugin hosting (non-WASM only), allowing for more open source and proprietary 3rd party effects and synths
- Silence optimizations (avoid processing if the audio buffer contains all zeros, useful when using "pools" of nodes where the majority of the time nodes are unused)
- Support for loading a wide variety of audio files using Symphonium
- Fault tolerance for audio streams (The game shouldn't stop or crash just because the player accidentally unplugged their headphones.)
- Properly respect realtime constraints (no mutexes!)
- An API that is friendly to ECS's (entity component systems)
While Firewheel is meant to cover nearly every use case for games and other applications, it is not meant to be a complete DAW (digital audio workstation) engine. Not only would this greatly increase complexity, but the needs of game audio engine and DAW audio engine are in conflict. (See the design document for more details on why).
Join the discussion in the Firewheel Discord Server or in the Bevy Discord Server under the working-groups -> Better Audio
channel!
If you are interested in contributing code, first read the Design Document and then visit the Project Board.
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0), or
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.